Пользовательский фильтр wordpress для списка пользовательских сообщений edit.php

У меня есть сообщения о пользовательских заказах, и я хочу реализовать дополнительный фильтр для представления списка (выпадающий список) в меню администратора.

Я возился с этим в течение нескольких часов, но не мог найти решение. я хочу фильтровать сообщения по нескольким мета-ключам и значениям и по дате публикации, это код, который я использую для этого

add_filter( 'parse_query', 'order_posts_filter' );

function order_posts_filter( $query ){
    global $pagenow,$wpdb;
    $type = 'post';
    if (isset($_GET['post_type'])) {
        $type = $_GET['post_type'];
    }
    if ( 'orders' == $type && is_admin() && $pagenow=='edit.php' && isset($_GET['ADMIN_FILTER_FIELD_VALUE']) && $_GET['ADMIN_FILTER_FIELD_VALUE'] != '') {
        $query->query_vars['post_date'] = $_GET['ADMIN_FILTER_FIELD_VALUE'];
    }
    if ( 'orders' == $type && is_admin() && $pagenow=='edit.php' && isset($_GET['ADMIN_FILTER_STATUS_VALUE']) && $_GET['ADMIN_FILTER_STATUS_VALUE'] != '') {
        $query->query_vars['meta_key'] = 'order_status';
        $query->query_vars['meta_value'] = $_GET['ADMIN_FILTER_STATUS_VALUE'];
    }
    return $query;
}

Что я здесь делаю неправильно? мои параметры $_GET работают должным образом, и я получаю соответствующие данные из полей выбора.

Благодарность


person lior r    schedule 16.06.2012    source источник
comment
Вы не сказали нам, что происходит неправильно? Не фильтрует?   -  person Tyler Carter    schedule 17.06.2012
comment
только второй фильтр применяется, когда я пытаюсь фильтровать по обоим полям   -  person lior r    schedule 17.06.2012


Ответы (1)


Я использую это:

function wpse454363_posts_filter( $query ){
global $pagenow;
$type = 'post';
if (isset($_GET['post_type'])) {
    $type = $_GET['post_type'];
}
if ( 'product' == $type && is_admin() && $pagenow=='edit.php') {
    $meta_query = array(); // Declare meta query to fill after
    if (isset($_GET['post_date']) && $_GET['post_date'] != '') {
        // first meta key/value
        $meta_query[] = array (
            'key'      => 'post_date',
            'value'    => $_GET['post_date']
        );
    }
    if (isset($_GET['order_status']) && $_GET['order_status'] != '') {
        // second meta key/value
        $meta_query[] = array (
            'key'      => 'order_status',
            'value'    => $_GET['order_status']
        );
    }
    $query->query_vars['meta_query'] = $meta_query; // add meta queries to $query
}
}

add_filter( 'parse_query', 'wpse454363_posts_filter' );
person Emil Gospodinov    schedule 23.04.2018