Статьи

WP_Query Аргументы: автор, поиск, пароль и разрешения

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

В этом последнем руководстве по аргументам WP_Query я рассмотрю некоторые менее часто используемые параметры, которые могут сделать ваши запросы еще более гибкими.

Параметры, которые мы рассмотрим здесь:

  • автор
  • поиск
  • пароль
  • разрешений
  • кэширование
  • возврат полей

Прежде чем мы начнем, давайте WP_Query как вы WP_Query свои аргументы с помощью WP_Query .

Когда вы WP_Query в своих темах или плагинах, вам нужно включить четыре основных элемента:

  • аргументы для запроса, используя параметры, которые будут рассмотрены в этом руководстве
  • сам запрос
  • петля
  • завершение: закрытие тегов if и while и сброс данных поста

На практике это будет выглядеть примерно так:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<?php
 
$args = array(
    // Arguments for your query.
);
 
// Custom query.
$query = new WP_Query( $args );
 
// Check that we have query results.
if ( $query->have_posts() ) {
 
    // Start looping over the query results.
    while ( $query->have_posts() ) {
 
        $query->the_post();
 
        // Contents of the queried post results go here.
 
    }
 
}
 
// Restore original post data.
wp_reset_postdata();
 
?>

Аргументы — это то, что сообщает WordPress, какие данные нужно извлечь из базы данных, и это те, которые я расскажу здесь. Итак, все, на чем мы концентрируемся, это первая часть кода:

1
2
3
$args = array(
    // Arguments for your query.
);

Как видите, аргументы содержатся в массиве. В этом уроке вы узнаете, как их кодировать.

Существует специальный способ кодирования аргументов в массиве, который заключается в следующем:

1
2
3
4
5
$args = array(
    ‘parameter1’ => ‘value’,
    ‘parameter2’ => ‘value’,
    ‘parameter3’ => ‘value’
);

Вы должны заключить параметры и их значения в одинарные кавычки, использовать => между ними и разделить их запятой. Если вы ошиблись, WordPress может не добавить все ваши аргументы в запрос, или вы можете получить белый экран.

Для запроса по автору можно использовать четыре параметра:

  • author ( int ): использовать идентификатор автора
  • author_name ( строка ): используйте имя_пользователя (НЕ имя)
  • author__in ( массив ): использовать идентификатор автора
  • author__not_in ( массив )

Первый, author , позволяет запрашивать сообщения одного или нескольких авторов, указав идентификатор автора:

1
2
3
$args = array(
    ‘author’ => ‘2’
);

Приведенный выше код запрашивает все сообщения автора с идентификатором 2 .

Вы также можете использовать строку для запроса сообщений более чем одним автором:

1
2
3
$args = array(
    ‘author’ => ‘1, 2’
);

Если вы хотите сделать запрос по имени, вы должны использовать параметр author_name :

1
2
3
$args = array(
    ‘author_name’ => ‘rachelmccollin’
);

Этот параметр принимает значение из поля user_nicename в базе данных в качестве аргумента, которое отображается как псевдоним на экране администратора пользователей:

Экран администратора пользователя с никнеймом

Обратите внимание, что так как это доступно для редактирования пользователям, вам будет безопаснее использовать параметр author если вы думаете, что ваши пользователи могут его изменить.

Вы также можете запросить сообщения по массиву авторов:

1
2
3
4
5
6
$args = array(
    ‘author__in’ => array(
        ‘1’,
        ‘2’
    )
);

Выше будет запрашивать сообщения двух авторов: с идентификаторами 1 и 2 , что даст вам те же результаты, что и строка, которую я использовал с параметром author выше.

Наконец, вы можете исключить сообщения одного или нескольких авторов, используя параметр author__not_in . Приведенный ниже аргумент запрашивает все сообщения, кроме сообщений автора 1 :

1
2
3
$args = array(
    ‘author__not_in’ => array( ‘1’ )
);

Или вы можете исключить нескольких авторов:

1
2
3
4
5
6
$args = array(
    ‘author__not_in’ => array(
        ‘1’,
        ‘2’
    )
);

В качестве альтернативы вы можете использовать параметр author и использовать знак минус перед ID автора, чтобы исключить автора:

1
2
3
$args = array(
    ‘author’ => ‘-2’
);

Для поиска есть только один параметр — s . Используйте его для запроса сообщений, которые соответствуют поисковому запросу. Так, например, для запроса сообщений, содержащих ключевые слова «моя любимая еда», вы должны использовать это:

1
2
3
$args = array(
    ‘s’ => ‘my favorite food’
);

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

Вы можете использовать два параметра пароля для запроса сообщений с защитой паролем и без нее:

  • has_password ( bool )
  • post_password ( строка )

Первый параметр has_password позволяет запрашивать сообщения с защитой паролем или без has_password . Итак, для запроса сообщений, которые защищены паролем:

1
2
3
$args = array(
    ‘has_password’ => true
);

И для сообщений, которые не имеют паролей:

1
2
3
$args = array(
    ‘has_password’ => false
);

Вы также можете сделать запрос по самому паролю, используя параметр post_password :

1
2
3
$args = array(
    ‘post_password’ => ‘mypassword’
);

Существует только один параметр, доступный для разрешений, perm , который вы используете для запроса сообщений, которые у текущего пользователя есть права на чтение. Он принимает 'readable' значение и предназначен для объединения с другими аргументами.

Таким образом, для запроса защищенных паролем сообщений и их отображения, только если у пользователя есть соответствующие разрешения, вы должны использовать это:

1
2
3
4
$args = array(
    ‘has_password’ => true,
    ‘perm’ => ‘readable’
);

Или для отображения черновиков сообщений, если текущий пользователь имеет разрешение на их просмотр, вы должны использовать это:

1
2
3
4
$args = array(
    ‘post_status’ => ‘draft’,
    ‘perm’ => ‘readable’
);

Существует три параметра кэширования, которые предотвращают добавление данных, полученных по запросу, в кэш:

  • cache_results ( булево ): кеш информации поста
  • update_post_meta_cache ( логическое ): кеширование метаинформации
  • update_post_term_cache ( boolean ): кеш пост-информации

Значением по умолчанию для всех трех является true : вам не нужно их использовать, если вы хотите, чтобы данные были добавлены в кэш.

Таким образом, чтобы отобразить все сообщения с типом публикации product но не добавлять информацию о записи в кеш, вы должны использовать это:

1
2
3
4
$args = array(
    ‘post_type’ => ‘product’,
    ‘cache_results’ => false
);

Обычно вы не должны использовать эти параметры, так как рекомендуется добавлять данные постов в кеш. Однако иногда вам может потребоваться получить сообщения, чтобы вы могли просто использовать некоторые данные сообщений, в этом случае вам не нужны остальные данные сообщений в кэше. Примером может служить случай, когда вы просто хотите вывести список заголовков записей со ссылками, и в этом случае вам не нужно добавлять данные или метаданные термина в пост:

1
2
3
4
5
$args = array(
    ‘post_type’ => ‘product’,
    ‘update_post_meta_cache’ => false,
    ‘update_post_term_cache’ => false
);

Вы можете использовать параметр fields чтобы указать, какие поля возвращать из вашего запроса. Это может сохранить возвращаемые данные из полей в базе данных, которые вам не нужны при выводе данных в вашем цикле.

По умолчанию возвращаются все поля, но у вас есть две опции с параметром fields чтобы ограничить это. Во-первых, аргумент 'ids' :

1
2
3
$args = array(
    ‘fields’ => ‘ids’
);

Это просто вернет массив идентификаторов записей и никаких других полей. Если вы хотите вывести что-либо в вашем цикле (например, заголовок записи), вам нужно будет использовать такие функции, как get_the_title ($post->ID); выводить заголовок, который был бы многословным способом ведения дел.

Другой аргумент, который вы можете использовать, выбирает ассоциативный массив идентификаторов записей с дочерними идентификаторами записей:

1
2
3
$args = array(
    ‘fields’ => ‘id=>parent’
);

Вы можете использовать это для запроса сообщений в соответствии с вашими другими аргументами плюс их детей.

Эта часть серии статей о WP_Query представляет окончательный набор параметров для класса WP_Query . Вы можете использовать их для запроса постов по автору, статусу защищенного паролем или самого пароля и условий поиска, а также для указания того, будут ли результаты запроса добавляться в кэш и какие поля будут возвращаться запросом.

В следующей части этой серии вы увидите несколько отработанных примеров использования WP_Query в своих темах или плагинах.