2

I have a post type events, which has column event_date on admin edit page. Event date is a meta data saved by a custom field in the format "2016-12-31". I have made a select box with filters for month / year of my events, just like the default WordPress filter for posts based on their creation dates. My question is: how can I make them work? What filters should I use? I though like intercept que query and configure the meta query just I would do in a "raw" WP_Query, but I don't know how.

3

You can use the pre_get_posts hook - the following code assumes your input name is event_date, and the values are in the format YYYY-MM.

It runs a few checks (is the input non-empty, are we in the admin, is this the main query, and is this for events?) before generating a meta query, which is an SQL IN for all the possible dates within the specified month:

add_action( 'pre_get_posts', function ( $wp_query ) {
    if (
        ! empty( $_REQUEST['event_date'] ) &&
        is_admin() &&
        $wp_query->is_main_query() &&
        $wp_query->get( 'post_type' ) === 'events'
    ) {
        // Assuming $_REQUEST['event_date'] is in the format YYYY-MM
        $year_month = $_REQUEST['event_date'];
        $dates      = [];

        for ( $day = 1; $day <= 32; $day++ ) {
            $dates[] = "$year_month-$day";
        }

        $wp_query->set( 'meta_query', [[
            'key'     => 'event_date',
            'compare' => 'IN',
            'value'   => $dates,
        ]]);
    }   
});

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.