# Integrating with WP_Query

Carbon Fields allow you to make Post, Term and User queries based on fields even inside complex fields.

# Example 1

Getting all posts which have a crb_text field with a value of 'hello world':

// field definition
Container::make( 'post_meta', __( 'Post Options' ) )
    ->where( 'post_type', '=', 'post' )
    ->add_fields( array(
        Field::make( 'text', 'crb_text', 'Text' ),
    ) );

// query
$query = new WP_Query( array(
    'post_type' => 'post',
    'meta_query' => array(
        array(
            'key' => 'crb_text',
            'value' => 'hello_world',
        ),
    ),
) );

# Example 2

Getting all posts which have a crb_map field with a longitude property larger than -2 (rather than combined lat, lng value):

// field definition
Container::make( 'post_meta', __( 'Post Options' ) )
    ->where( 'post_type', '=', 'post' )
    ->add_fields( array(
        Field::make( 'map', 'crb_map', 'Map' ),
    ) );

// query
$query = new WP_Query( array(
    'post_type' => 'post',
    'meta_query' => array(
        array(
            'key' => 'crb_map',
            'carbon_field_property' => 'lng',
            'compare' => '>',
            'value' => -2,
        ),
    ),
) );

# Example 3

Getting all posts which have 'red' selected in the crb_colors Set field:

// field definition
Container::make( 'post_meta', __( 'Post Options' ) )
    ->where( 'post_type', '=', 'post' )
    ->add_fields( array(
        Field::make( 'set', 'crb_colors', 'Colors' )
            ->add_options( array( 'red' => 'Red', 'green' => 'Green', 'blue' => 'Blue' ) ),
    ) );

// query
$query = new WP_Query( array(
    'post_type' => 'post',
    'meta_query' => array(
        array(
            'key' => 'crb_colors',
            'value' => 'red',
        ),
    ),
) );

# Example 4

Getting all posts which have 'New York' entered in the city Text_Field inside a crb_cities complex field:

// field definition
Container::make( 'post_meta', __( 'Post Options' ) )
    ->where( 'post_type', '=', 'post' )
    ->add_fields( array(
        Field::make( 'complex', 'crb_cities', 'Cities' )
            ->add_fields( array(
                Field::make( 'text', 'city', 'City' ),
            ) )
    ) );

// query
$query = new WP_Query( array(
    'post_type' => 'post',
    'meta_query' => array(
        array(
            'key' => 'crb_cities/city',
            'value' => 'New York',
        ),
    ),
) );

# Example 5

Getting all posts which have 'New York' entered in the city Text_Field inside a crb_cities complex field when the complex has multiple groups:

// field definition
Container::make( 'post_meta', __( 'Post Options' ) )
    ->where( 'post_type', '=', 'post' )
    ->add_fields( 'group1', array(
        Field::make( 'complex', 'crb_cities', 'Cities' )
            ->add_fields( array(
                Field::make( 'text', 'city', 'City' ),
            ) )
    ) )
    ->add_fields( 'group2', array(
        Field::make( 'complex', 'crb_cities', 'Cities' )
            ->add_fields( array(
                // ...
            ) )
    ) );

// query
$query = new WP_Query( array(
    'post_type' => 'post',
    'meta_query' => array(
        array(
            'key' => 'crb_cities:group1/city',
            'value' => 'New York',
        ),
    ),
) );

# Example 6

Ordering posts based on a Carbon Field value:

// field definition
Container::make( 'post_meta', __( 'Post Options' ) )
    ->where( 'post_type', '=', 'post' )
    ->add_fields( array(
        Field::make( 'text', 'crb_text', 'Text' ),
    ) );

// query
$query = new WP_Query( array(
    'post_type' => 'post',
    'orderby' => 'text_field',
    'order' => 'asc',
    'meta_query' => array(
        'text_field' => array(
            'key' => 'crb_text',
            'compare' => 'EXISTS',
        ),
    ),
) );
Last Updated: 3/23/2021, 11:15:16 AM