Этот урок связан с проектом Работа с WP_Query

Работа с 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! В следующей части мы поговорим о экшенах и фильтрах.

Данный урок подготовлен для вас командой сайта ruseller.com
Источник урока: http://code.tutsplus.com/tutorials/mastering-wp_query-related-functions--cms-22951
Перевел: Станислав Протасевич
Урок создан: 3 Ноября 2015
Просмотров: 5689
Правила перепечатки


5 последних уроков рубрики "Wordpress"

или авторизуйтесь, чтобы добавлять комментарии, оценивать уроки и сохранять их в личном кабинете
  • 15 Июня 2016 21:27
    egmalt
    Спасибо за отличный материал. Ждем продолжения
^ Наверх ^