Все виды циклов в wordpress

Циклы в WordPress — это способ обхода и вывода содержимого из базы данных на веб-страницы. Они используются для извлечения и отображения постов, страниц, категорий и других типов контента, которые хранятся в базе данных WordPress.

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

Для чего нужны циклы wordpress

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

Стандартный Цикл WordPress (The Loop):

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

  • Используется на большинстве страниц WordPress для вывода записей.
  • Автоматически работает с глобальным объектом запроса WordPress.
  • Идеально подходит для основного содержимого страницы или сообщений.

Пример цикла The Loop

Просто пример кода,который выводит записи из шаблона single.php 

if ( have_posts() ) : 

    while ( have_posts() ) : the_post();

        the_title();

        the_content();

    endwhile;

else :

    echo 'Нет записей.';

endif;

Когда использовать цикл The Loop?

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

Настраиваемый цикл WP_Query

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

  • Наиболее гибкий и мощный способ создания настраиваемых запросов для вывода записей.
  • Используется для создания специфических запросов, не связанных с основным запросом страницы.
  • Отлично подходит для создания дополнительных списков записей, портфолио, кастомных слайдеров и т.д.

Пример базового цикла WP_Query

$args = array(

    'post_type' => 'product',

    'posts_per_page' => 3

);

$query = new WP_Query( $args );

if ( $query->have_posts() ) :

    while ( $query->have_posts() ) : $query->the_post();

        the_title();

        the_excerpt();

    endwhile;

    wp_reset_postdata();

endif;

Пример цикла WP_Query с выводом дополнительного контента

<?php

// Аргументы для WP_Query

$args = array(

    'post_type' => 'post',

    'posts_per_page' => 5, // Выводим только 5 последних постов

    'category__not_in' => array( $current_category_id ) // Исключаем категорию текущего основного запроса

);

// Создаем новый запрос

$latest_posts_query = new WP_Query( $args );

// Цикл для вывода постов

if ( $latest_posts_query->have_posts() ) {

    while ( $latest_posts_query->have_posts() ) {

        $latest_posts_query->the_post();

        // Выводим заголовок и ссылку на пост

        echo '<li><a href="' . get_permalink() . '">' . get_the_title() . '</a></li>';

    }

    wp_reset_postdata(); // Важно сбросить данные после нашего запроса

}

?>

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

Произвольный цикл WP_Query — максимум параметров

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

<?php

// Аргументы для настраиваемого запроса записей

$args = array(

    'post_type'      => 'post',      // Тип записи, в данном случае стандартные записи блога

    'post_status'    => 'publish',   // Статус записи, только опубликованные

    'posts_per_page' => 10,          // Количество записей на странице

    'orderby'        => 'date',      // Сортировка по дате

    'order'          => 'DESC',      // Направление сортировки - по убыванию

    'cat'            => '',          // ID категорий (через запятую), если нужно ограничить по категориям

    'tag'            => '',          // Теги, если нужно ограничить по тегам

    'author'         => '',          // ID авторов, если нужно ограничить по авторам

    'paged'          => get_query_var('paged') ? get_query_var('paged') : 1, // Текущая страница пагинации

    'post__in'       => array(),     // Массив ID записей для включения

    'post__not_in'   => array(),     // Массив ID записей для исключения

    'meta_key'       => '',          // Ключ метаполя, если требуется сортировка по метаполю

    'meta_value'     => '',          // Значение метаполя для фильтрации

    'meta_query'     => array(),     // Массив для сложных запросов по метаполям

    'tax_query'      => array(),     // Массив для запросов по таксономиям

    'date_query'     => array(),     // Массив для фильтрации по датам

    // Другие параметры по необходимости

);

// Создаем запрос с помощью WP_Query

$the_query = new WP_Query( $args );

// Цикл для вывода записей

if ( $the_query->have_posts() ) {

    while ( $the_query->have_posts() ) {

        $the_query->the_post();

        // Выводим содержимое записи

        the_title();    // Заголовок записи

        the_content();  // Содержимое записи

    }

    wp_reset_postdata(); // Сброс после запроса

} else {

    // Если записи не найдены

    echo 'Записи не найдены.';

}

?>

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

WordPress цикл get_posts():

Этот метод проще, чем WP_Query, и подходит для быстрого получения списка записей без настройки полного цикла WP.

  • Проще в использовании, чем WP_Query, но менее гибкий.
  • Возвращает массив записей, который затем можно перебирать в цикле foreach.
  • Хорошо подходит для простых или одноразовых запросов записей.

Пример цикла get_posts():

$posts = get_posts( array(

    'numberposts' => 5,

    'category'    => 10

));

foreach ( $posts as $post ) :

    setup_postdata( $post );

    the_title();

    the_excerpt();

endforeach;

wp_reset_postdata();

Когда использовать цикл get_posts():

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

Цикл query_posts():

Этот метод изменяет основной запрос WordPress, но его использование я не рекомендую, могут быть проблемы с производительностью и пагинацией.

  • Изменяет глобальный запрос WordPress.
  • Не рекомендуется к использованию, так как он перезаписывает основной запрос и может привести к проблемам с производительностью.
  • Если нужно изменить основной запрос, лучше использовать pre_get_posts.

Пример цикла query_posts():

query_posts( array( 'posts_per_page' => 5 ) );

if ( have_posts() ) :

    while ( have_posts() ) : the_post();

        the_title();

    endwhile;

endif;

Когда использовать цикл query_posts(): ?: 

Лучше избегать использования query_posts, используйте WP_Query или pre_get_posts.

Цикл (хук) pre_get_posts:

По факту это не цикл, а хук, с помощью которого можно изменить параметры основного запроса еще до того, как основной цикл будет выполнен. Необходимо использовать код хука в файле темы function.php.

  • Позволяет изменить основной запрос WordPress до того, как он будет выполнен.
  • Используется для изменения запросов на страницах архивов, главной страницы или категорий.
  • Полезен для изменения параметров запроса без создания нового запроса.

Пример pre_get_posts:

function modify_main_query( $query ) {

    if ( !is_admin() && $query->is_main_query() ) {

        if ( $query->is_home() ) {

            $query->set( 'posts_per_page', 10 );

        }

    }

}

add_action( 'pre_get_posts', 'modify_main_query' );

Когда использовать pre_get_posts:

Для изменения параметров основного запроса на определенных страницах, например, для изменения количества постов на главной странице.

WordPress Custom Database Queries

Прямые запросы к базе данных через $wpdb для выполнения специфических задач, не покрываемых стандартными функциями WordPress.

  • Используется для прямого запроса к базе данных WordPress через класс $wpdb.
  • Подходит для очень специфических или нестандартных запросов данных, которые не покрываются стандартными функциями WordPress.
  • Требует хорошего понимания работы с базами данных MySQL.

Пример запроса WordPress Custom Database Queries

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

global $wpdb;

$user_id = get_current_user_id(); // ID текущего пользователя

// Запрос к базе данных

$results = $wpdb->get_results( $wpdb->prepare(

    "SELECT p.* FROM {$wpdb->prefix}posts AS p

    INNER JOIN {$wpdb->prefix}postmeta AS pm ON p.ID = pm.post_id

    WHERE pm.meta_key = %s AND pm.meta_value = %s AND p.post_status = 'publish'",

    'meta_key', // ключ метаполя

    'meta_value' // значение метаполя

));

// Обработка результатов

if ( !empty( $results ) ) {

    foreach ( $results as $post ) {

        setup_postdata( $post );

        the_title(); // выводим заголовок поста

        // другие данные поста

    }

    wp_reset_postdata();

} else {

    echo 'Посты не найдены.';

}

В этом примере используется прямой SQL-запрос к базе данных WordPress для получения списка постов, которые соответствуют определенным критериям мета-значений. 

Когда использовать Custom Database Queries

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

Финалочка

Используйте циклы по назначению и не перегружайте сайт излишним кодом и запросами к базе данных. Во избежания проблем со скоростью работы сайта и его стабильностью. Для простых запросов используйте стандартный The Loop. Нужен кастомный цикл с дополнительными параметрами, работайте с  WP_Query и будет вам счастье)

Для отправки комментария вам необходимо авторизоваться.

Популярные статьи: