Основой структуры wordpress является запрос к базе данных и вывод данных в цикл. Какие бывают циклы, когда лучше применять тот или иной цикл, рассмотрим в данной статье.
Стандартный цикл wordpress (index.php, category.php, tag.php, архивы)
<?php if (have_posts()) : ?> <?php while (have_posts() ) : the_post(); ?> <h2><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h2> <?php endwhile; ?> <?php endif; ?>
Цикл на основе query_posts()
<?php global $query_string; // параметры базового запроса query_posts($query_string.'&cat=-6,-9&order=ASC&posts_per_page=20'); // базовый запрос + свои параметры ?>
[СТАНДАРТНЫЙ ЦИКЛ WORDPRESS]
<?php wp_reset_query();// сброс запроса?>
Пользовательские типы записей в шаблоне категорий (&post_type=video) — не очень хорошая идея, т.к. ломается пэйджинация. Типы записей лучше делать архивами.
Цикл на основе WP_Query()
<?php $query = new WP_Query( 'cat=9&nopaging=1' );// указываем категорию 9 и выключаем разбиение на страницы (пагинацию) ?> <?php if ($query ->have_posts()) : ?> <?php while ($query->have_posts() ) : $query->the_post(); ?> <h2><a href="<?php the_permalink(); ?>"> <?php the_title(); ?></a></h2> <?php endwhile; ?> <?php endif; ?> <?php wp_reset_postdata(); // сбрасываем переменную $post ?>
Цикл на основе get_posts()
<?php global $post; $args = array( 'posts_per_page' => 5, 'offset'=> 0, 'category' => 48 ); $myposts = get_posts( $args ); foreach( $myposts as $post ) : setup_postdata($post); ?> <a href="<?php the_permalink(); ?>"><?php the_post_thumbnail(thumbnail); ?><?php the_title(); ?></a> <?php endforeach; ?> <?php wp_reset_postdata() ?>
Где и какой из 3-х вариантов циклов использовать:
- query_posts() — если нужно изменить/подправить стандартный вывод записей на страницах WordPress. Можно использовать 1 раз на странице;
- get_posts() — если нужно вывести записи из Базы Данных. Можно использовать сколько угодно раз на странице;
- Класс WP_Query() — во всех других случаях когда не подошли query_posts() и get_posts().
Инфографика по данной теме
И еще раз тезисно:
query_posts — основной (базовый) запрос wordpress, влияет в каком месте (запись, категория, поиск и т.д.) сайта мы находимся. Если необходимо незначительно скорректировать используем query_posts.
Если нужно создать какой-либо масштабный запрос, используем WP_Query — это независимый полноценный запрос.
get_posts является легковесной служебной функцией для создания выборки постов.
Изменение основного цикла
Нужно добавлять перед if ( have_posts() ) :
<?php // Изменяем основной запрос
global $wp_query;
$params = array(
'posts_per_page' => -1
);
$params = array_merge( $wp_query->query, $params );
query_posts( $params ); ?>
Так же можно писать и так:
global $query_string; // параметры базового запроса
query_posts($query_string.'&orderby=meta_value_num&meta_key=area&order=ASC'); // + свои параметры
if(have_posts()) :
while(have_posts()) : the_post();
get_template_part( 'solus' );
endwhile;
endif;
Либо так:
global $query_string; // добавляем базовые параметры в массив $args
parse_str($query_string, $args); // добавляем/заменяем параметр в массиве
$args['posts_per_page'] = -1;
query_posts( $args );
Дальнейшая тема для изучения — глобальные переменные.
[site-socialshare]