EP_API::prepare_meta PHP Method

prepare_meta() public method

Prepare post meta to send to ES
Since: 0.1.0
public prepare_meta ( object $post ) : array
$post object
return array
    public function prepare_meta($post)
    {
        $meta = (array) get_post_meta($post->ID);
        if (empty($meta)) {
            return array();
        }
        $prepared_meta = array();
        /**
         * Filter index-able private meta
         *
         * Allows for specifying private meta keys that may be indexed in the same manor as public meta keys.
         *
         * @since 1.7
         *
         * @param         array Array of index-able private meta keys.
         * @param WP_Post $post The current post to be indexed.
         */
        $allowed_protected_keys = apply_filters('ep_prepare_meta_allowed_protected_keys', array(), $post);
        /**
         * Filter non-indexed public meta
         *
         * Allows for specifying public meta keys that should be excluded from the ElasticPress index.
         *
         * @since 1.7
         *
         * @param         array Array of public meta keys to exclude from index.
         * @param WP_Post $post The current post to be indexed.
         */
        $excluded_public_keys = apply_filters('ep_prepare_meta_excluded_public_keys', array(), $post);
        foreach ($meta as $key => $value) {
            $allow_index = false;
            if (is_protected_meta($key)) {
                if (true === $allowed_protected_keys || in_array($key, $allowed_protected_keys)) {
                    $allow_index = true;
                }
            } else {
                if (true !== $excluded_public_keys && !in_array($key, $excluded_public_keys)) {
                    $allow_index = true;
                }
            }
            if (true === $allow_index || apply_filters('ep_prepare_meta_whitelist_key', false, $key, $post)) {
                $prepared_meta[$key] = maybe_unserialize($value);
            }
        }
        return $prepared_meta;
    }

Usage Example

Example #1
0
 /**
  * Test to verify meta array is built correctly.
  *
  * @since 1.7
  */
 public function testPrepareMeta()
 {
     $post_id = ep_create_and_sync_post();
     $post = get_post($post_id);
     $meta_values = array('value 1', 'value 2');
     add_post_meta($post_id, 'test_meta_1', 'value 1');
     add_post_meta($post_id, 'test_meta_1', 'value 2');
     add_post_meta($post_id, 'test_meta_1', $meta_values);
     add_post_meta($post_id, '_test_private_meta_1', 'value 1');
     add_post_meta($post_id, '_test_private_meta_1', 'value 2');
     add_post_meta($post_id, '_test_private_meta_1', $meta_values);
     $api = new EP_API();
     $meta_1 = $api->prepare_meta($post);
     add_filter('ep_prepare_meta_allowed_protected_keys', array($this, 'filter_ep_prepare_meta_allowed_protected_keys'));
     $meta_2 = $api->prepare_meta($post);
     add_filter('ep_prepare_meta_excluded_public_keys', array($this, 'filter_ep_prepare_meta_excluded_public_keys'));
     $meta_3 = $api->prepare_meta($post);
     $this->assertTrue(is_array($meta_1) && 1 === sizeof($meta_1));
     $this->assertTrue(is_array($meta_1) && array_key_exists('test_meta_1', $meta_1));
     $this->assertTrue(is_array($meta_2) && 2 === sizeof($meta_2));
     $this->assertTrue(is_array($meta_2) && array_key_exists('test_meta_1', $meta_2) && array_key_exists('_test_private_meta_1', $meta_2));
     $this->assertTrue(is_array($meta_3) && 1 === sizeof($meta_3));
     $this->assertTrue(is_array($meta_3) && array_key_exists('_test_private_meta_1', $meta_3));
 }