Title: Indexing post meta
Author: WordPress VIP Documentation
Published: March 10, 2021
Last modified: December 22, 2023

---

 1. [Enterprise Search](https://docs.wpvip.com/enterprise-search/)
 2. [Choose what to index](https://docs.wpvip.com/enterprise-search/indexing/)
 3. Indexing post meta

#  Indexing post meta

Post meta is **not** indexed by default. If post meta is not explicitly defined 
in the allow list, it will not be indexed.

## Adding post meta to the allow list

Use the `vip_search_post_meta_allow_list` to customize which post meta is to be 
indexed.

There are many different types of post meta. Some types of post meta might be used
only for displaying information. Other types might be used for tracking things, 
and some may be used as part of a search. In this code example, the `hide-from-home-
page` post meta is added to the allow list and indexed:

    ```lang-php
    add_filter( 'vip_search_post_meta_allow_list', 'mysite_global_indexable_post_meta', 10, 2 );

    function mysite_global_indexable_post_meta( $allow, $post = null ) {
    	$allow['hide-from-home-page'] = true;

    	return $allow;
    }
    ```

Note the convention here builds a list that looks as follows; this permits later
filters to disable items by changing the value to `false`:

    ```lang-php
    [
    	'event-start-date' => true,
    	'event-end-date'   => true,
    ]
    ```

**Note**

After the post meta allow list has been modified, [re-indexing must be performed](https://docs.wpvip.com/vip-search/post-meta/#h-post-meta-must-be-indexed-to-be-used-in-queries).

This code example demonstrates how to index the post meta of `event-start-date`,
but only for `event` custom post types. The post type is passed to the `$post` parameter:

    ```lang-php
    add_filter( 'vip_search_post_meta_allow_list', 'mysite_events_indexable_post_meta', 10, 2 );

    function mysite_events_indexable_post_meta( $allow, $post ) {
    	if ( is_object( $post ) && 'event' === $post->post_type ) {
    		$allow['event-start-date'] = true;
    	}

    	return $allow;
    }
    ```

## Post meta must be indexed to be used in queries

If a post meta is not indexed, a search will return an error that the meta was not
found and will fail until the meta key is added to the allow list. To display post
meta, code should access the meta using WordPress functions, and not rely on the
Elasticsearch (ES) search results for that field.

For example, using a meta query on `event` post types with a `publish` status, the
post meta that must be indexed is `event-start-date`:

    ```lang-php
    $args = array(
    	'post_type'      => 'event',
    	'post_status'    => 'publish',
    	'posts_per_page' => 30,
    	'meta_query' => array(
    		array(
    			'key'     => 'event-start-date',
    			'value'   => strtotime( 'today' ),
    			'type'    => 'string',
    			'compare' => '>=',
    		),
    	),
    );
    $query = new WP_Query( $args );	 
    ```

Last updated: December 22, 2023