How to Index Serialized Data

With FacetWP, it’s possible to index custom fields stored as a serialized array.

Let’s say you have a facet named days_of_week that uses a custom field with the same name. In the database, an example postmeta row looks like:


To index it, add the following code to functions.php, then hit the Re-index button.


function index_serialized_data( $params, $class ) {
    if ( 'days_of_week' == $params['facet_name'] ) {
        $values = (array) $params['facet_value'];
        foreach ( $values as $val ) {
            $params['facet_value'] = $val;
            $params['facet_display_value'] = $val;
            $class->insert( $params );
        return false; // skip default indexing
    return $params;
add_filter( 'facetwp_index_row', 'index_serialized_data', 10, 2 );