Работа с классом WP_Query: Связные функции

В первой части мы начали наше знакомство с классом WP_Query. Во второй части продолжим данную тему, и познакомим Вас с вспомогательными функциями.

Давайте начнём!

Мощь функций, экшенов и фильтров в рамках работы с WP_Query

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

Вдобавок к свойствам, методам и параметрам (которые мы рассмотрим в будущем), WordPress предоставляет нам множество функций и хуков (экшенов и фильтров) для работы с классом WP_Query. В этом уроке мы рассмотрим функции, а в следующих частях экшены и фильтры, связанные с WP_Query.

Связные функции

В WordPress существует 13 функций, которые можно задействовать при работе с классом WP_Query:

Получение публичных параметров запроса: get_query_var()

Название данной функции говорит само за себя: оно берёт глобальный объект $wp_query и извлекает публичные переменные запроса. Принимает два параметра: название переменной; значение по умолчанию переменной, если оно не задано:

<?php    
$paged = get_query_var( 'paged', 1 );    
?>

Влияние на основной цикл: query_posts()

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

query_posts() - это функция, которая преобразует основной запрос, заменяя обычное поведение другим. После использования следует вызвать wp_reset_query() для сброса данных запроса.

<?php   
query_posts( 'category_name=news' );  
?>

Редко встретишь случай правильного использования данной функции. Для создания вторичных запросов следует использовать не её, а класс WP_Query или функцию get_posts() (о которой поговорим в будущем). Для преобразования основного запроса так же лучше воспользоваться экшеном pre_get_posts.

И ещё раз: не используйте данный метод.

Извлечение одиночного поста: get_post()

Ещё одна функция, которая говорит сама за себя: get_post(). Принимает три необязательных параметра:

  • Идентификатор поста (по умолчанию: ID текущего поста).
  • Тип возвращаемого результата: OBJECT, ARRAY_A (ассоциативный массив) или ARRAY_N (обычный массив).
  • Фильтрация результата. По умолчанию 'raw' (фильтрация не будет применяться). Другие значения 'edit', 'display', 'attribute' или 'js'.
<?php    
$first_post = get_post( 1, ARRAY_A );  
$post_title = $first_post[ 'post_title' ];   
?>

Сохранение запросов в массивы: get_posts()

Функция get_posts() позволяет запускать запросы и сохранять их в массивы для использования в других местах. Принимает те же параметры что и WP_Query. Лучший способ создания списков постов — но не циклов.

<l?php   
$args = array(
    'category_name' => 'news',  
    'order' => 'ASC',    
    'orderby' => 'post_title',  
    'posts_per_page' => -1 
);   
// Получение массива постов категории "news".
$all_posts_list = get_posts( $args );  
?>

Извлечение страниц: get_pages()

Данная функция предназначена для извлечения массивов страниц. Так же вы можете указать параметр post_type, что позволит извлечь другие типы постов (если указать, то ответ будет с вложенными результатами, по умолчанию false).

<?php  
$args = array(  
    'sort_order' => 'ASC',   
    'sort_column' => 'post_title', 
    'hierarchical' => 1,   
    'exclude' => '',   
    'include' => '',    
    'meta_key' => '',    
    'meta_value' => '',    
    'authors' => '',    
    'child_of' => 0,    
    'parent' => -1,     
    'exclude_tree' => '',  
    'number' => '',    
    'offset' => 0,   
    'post_type' => 'page',  
    'post_status' => 'publish' 
); 
$pages = get_pages( $args );  
?>

Принимает аргументы схожие с WP_Query:

  • sort_order: порядок вывода, в порядке возрастания (asc) или убывания (desc).
  • sort_column: сортировка. Принимает post_title, menu_order, post_date, post_modified, ID, post_author и post_name.
  • hierarchical: результат с вложениями (1) или нет (0).
  • exclude: массив с идентификаторами, которые нужно исключить из списка.
  • include: массив с идентификаторами, которые нужно обязательно включить в список.
  • meta_key: при использовании аргумента meta_value, будут извлечены только страницы с поисковым meta по ключу и значению.
  • meta_value: при использовании аргумента meta_key, будут извлечены только страницы с поисковым meta по ключу и значению.
  • authors: список идентификаторов авторов.
  • child_of: идентификатор страницы потомков которых необходимо сканировать.
  • parent: идентификатор родителя. Для активации данного параметра, hierarchical должен быть равен 0.
  • exclude_tree: массив идентификаторов, страницы которых должны быть исключены (включая потомков).
  • number: количество страниц, которые нужно извлечь.
  • offset: смещение.
  • post_type: типы постов. По умолчанию page.
  • post_status: список статусов, которые следует рассматривать.

Проверка наличия постов: have_posts()

Данная функция просто вернёт TRUE если по запросу будут какие-то результаты или FALSE в противном случае.

<?php  
if ( have_posts() ) {   
	// Success.   
} else {    
	// Failure.   
}  
?>

Работа с циклом: the_post()

Схема работы согласно кодексу:

  1. Извлечение результата из запроса.
  2. Установка значения для $post.
  3. Установка значения TRUE параметру in_the_loop.
<?php  
if ( have_posts() ) {  
    while ( have_posts() ) {     
        the_post();         
        the_title();  
        the_content();  
    }
} 
?>

Настройка $post: setup_postdata()

Данная функция предназначена для установки глобальных параметров поста.

setup_postdata() позволяет работать с параметрами $id, $authordata, $currentday, $currentmonth, $page, $pages, $multipage, $more, $numpages.

<?php   
global $post;  
setup_postdata( $post );  
?>

Очистка дынных текущего запроса: rewind_posts()

Перенос указателя на первый результат в списке постов (для дальнейшего использования цикла в другом месте).

<?php  
// После цикла. 
rewind_posts();  
?>

Сброс $post: wp_reset_postdata()

Данная функция сбрасывает значения глобальной переменной $post. Полезна при запуске вторичных запросов.

<?php 
wp_reset_postdata();  
?>

Сброс Query: wp_reset_query()

Следует использовать в случае изменения основного запроса.

<?php 
// После преобразования основного запроса. 
wp_reset_query();  
?>

Является ли текущий запрос - основным: is_main_query()

Это один из условных тегов, который вернёт TRUE если текущий запрос является основным и FALSE если нет.

<?php  
if ( is_main_query() ) {      
	// Success.  
} else { 
	// Failure.
} 
?>

Проверка нахождения в цикле: in_the_loop()

Ещё один условный тег, который возвращает TRUE или FALSE в зависимости от того выполняется ли цикл.

<?php  
if ( in_the_loop() ) { 
	// Success.  
} else {
	// Failure. 
} 
?>

Заключение

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

Источник урока: http://code.tutsplus.com/tutorials/mastering-wp_query-related-functions--cms-22951
Перевел: Станислав Протасевич, Источник

 

Добавить комментарий


Защитный код
Обновить