Grunion_Contact_Form_Plugin::get_export_data_for_posts PHP Метод

get_export_data_for_posts() публичный Метод

Prepares feedback post data for CSV export.
public get_export_data_for_posts ( array $post_ids ) : array
$post_ids array Post IDs to fetch the data for. These need to be Feedback posts.
Результат array
    public function get_export_data_for_posts($post_ids)
    {
        $posts_data = array();
        $field_names = array();
        $result = array();
        /**
         * Fetch posts and get the possible field names for later use
         */
        foreach ($post_ids as $post_id) {
            /**
             * Fetch post main data, because we need the subject and author data for the feedback form.
             */
            $post_real_data = $this->get_parsed_field_contents_of_post($post_id);
            /**
             * If `$post_real_data` is not an array or there is no `_feedback_subject` set,
             * then something must be wrong with the feedback post. Skip it.
             */
            if (!is_array($post_real_data) || !isset($post_real_data['_feedback_subject'])) {
                continue;
            }
            /**
             * Fetch main post comment. This is from the default textarea fields.
             * If it is non-empty, then we add it to data, otherwise skip it.
             */
            $post_comment_content = $this->get_post_content_for_csv_export($post_id);
            if (!empty($post_comment_content)) {
                $post_real_data['_feedback_main_comment'] = $post_comment_content;
            }
            /**
             * Map parsed fields to proper field names
             */
            $mapped_fields = $this->map_parsed_field_contents_of_post_to_field_names($post_real_data);
            /**
             * Fetch post meta data.
             */
            $post_meta_data = $this->get_post_meta_for_csv_export($post_id);
            /**
             * If `$post_meta_data` is not an array or if it is empty, then there is no
             * extra feedback to work with. Create an empty array.
             */
            if (!is_array($post_meta_data) || empty($post_meta_data)) {
                $post_meta_data = array();
            }
            /**
             * Prepend the feedback subject to the list of fields.
             */
            $post_meta_data = array_merge($mapped_fields, $post_meta_data);
            /**
             * Save post metadata for later usage.
             */
            $posts_data[$post_id] = $post_meta_data;
            /**
             * Save field names, so we can use them as header fields later in the CSV.
             */
            $field_names = array_merge($field_names, array_keys($post_meta_data));
        }
        /**
         * Make sure the field names are unique, because we don't want duplicate data.
         */
        $field_names = array_unique($field_names);
        /**
         * Sort the field names by the field id number
         */
        sort($field_names, SORT_NUMERIC);
        /**
         * Loop through every post, which is essentially CSV row.
         */
        foreach ($posts_data as $post_id => $single_post_data) {
            /**
             * Go through all the possible fields and check if the field is available
             * in the current post.
             *
             * If it is - add the data as a value.
             * If it is not - add an empty string, which is just a placeholder in the CSV.
             */
            foreach ($field_names as $single_field_name) {
                if (isset($single_post_data[$single_field_name]) && !empty($single_post_data[$single_field_name])) {
                    $result[$single_field_name][] = trim($single_post_data[$single_field_name]);
                } else {
                    $result[$single_field_name][] = '';
                }
            }
        }
        return $result;
    }