Фильтровать список сообщений администратора с несколькими фильтрами; как структурировать объект запроса с помощью логического оператора AND - PullRequest
1 голос
/ 08 марта 2019

Мне нужна помощь в понимании того, как структурировать объект WP_query для применения нескольких критериев / фильтров.

В этом случае я в настоящее время фильтрую список сообщений администратора, используя две переменные get, которые должны ОБА соответствовать списку полученных сообщений.Я могу заставить это работать нормально для одной переменной, но не для обеих.

После того, как переменная get установлена, следующее отлично работает для фильтрации списков записей администратора по одной переменной get (помеченной как «Уведомление» в getпеременная и ключ базы данных ACF "author_notified").

add_filter( 'parse_query', 'filter_admin',15 );

function filter_admin( $query ){
    global $pagenow;
    $type = 'post';
    if (isset($_GET['post_type'])) {
        $type = $_GET['post_type'];
    }
    if ( 'post' == $type && is_admin() && $pagenow=='edit.php' && isset($_GET['Notification']) && $_GET['Notification'] != '') {
        $query->query_vars['meta_key'] = 'author_notified';
        $query->query_vars['meta_value'] = $_GET['Notification'];
    }

}

Это приводит к объекту запроса, где WP_query [query_vars] [meta_key] и WP_query [query_vars] [meta_value] предназначаются для желаемого подмножества сообщений.

Как следует структурировать объект запроса так, чтобы он был нацелен на подмножество постов, которые соответствуют двум одинаковым критериям одновременно?Или, проще, как мне отфильтровать списки сообщений администратора по двум критериям, которые оба должны быть истинными?

Я все еще довольно плохо знаком с PHP / wordpress и не знаю, как структурировать объекты запросов.Любая помощь или предложения будут высоко оценены!

1 Ответ

1 голос
/ 11 марта 2019

Решено, большое спасибо за советы по устранению неполадок от @ FluffyKitten.

Объект WP_query должен быть структурирован следующим образом, чтобы получить несколько фильтров для списка сообщений администратора.По сути, поля ACF могут быть добавлены с помощью логических операторов в WP_query [query_vars] [meta_query]:

        [meta_query] => Array
            (
                [relation] => AND
                [0] => Array
                    (
                        [key] => author_notified
                        [value] => 1
                        [compare] => =
                        [type] => NUMERIC
                    )

                [1] => Array
                    (
                        [key] => recommended_decision
                        [value] => 0
                        [compare] => =
                        [type] => CHAR
                    )

            )

Эта структура объекта запроса может быть выполнена с помощью функции следующим образом, предполагая переменные GET с именами «Уведомление» и «Рекомендация "уже была установлена ​​в другом месте:

add_filter( 'parse_query', 'posts_filter2',15 );

function posts_filter2( $query ){
   global $pagenow;
   $type = 'post';
   if (isset($_GET['post_type'])) {
       $type = $_GET['post_type'];
   }
   if ( 'post' == $type && is_admin() && $pagenow=='edit.php') {

        $queryParamsCounter = 0;
        if (isset( $_GET['Notification'] ) && $_GET['Notification'] != '')
        {
          $notification = (int)$_GET['Notification'];
          $queryParamsCounter++;
        }
        if (isset( $_GET['Recommendation'] ) && $_GET['Recommendation'] != '')
        {
          $queryParamsCounter++;
          $recommendation = $_GET['Recommendation'];
        }

        $meta_query = array();

        if ($queryParamsCounter > 1) {
          $meta_query['relation'] = 'AND';
        }

        if (isset($notification)) {
          $meta_query[] =       array(
            'key' => 'author_notified',
            'value'    => $notification,
            'compare' => '=',
            'type'    => 'NUMERIC',  
          );
        }
        if (isset($recommendation)) {
          $meta_query[] = array(
            'key'     => 'recommended_decision',
            'value'   => $recommendation,
            'compare' => '=',
            'type'    => 'CHAR',
          );
        }

        $query->set( 'meta_query', $meta_query);

    }
}

Обратите внимание, что если выбран только один фильтр, ключ отношения не должен использоваться.

Я надеюсь, что это поможет другим, сталкивающимся с той же проблемой!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...