Как использовать WP-запрос в WordPress

Если вы были вокруг WordPress на некоторое время, вы будете знать, как трудно было создать списки сообщений, основанных на сложных критериев, а также в соответствии со стандартами WordPress. За несколько лет платформа прошла долгий путь. Используя силу WP_Query класса, мы можем перечислять сообщения в любом случае мы хотим.

wp_query

Что такое WP-Кипри?

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

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

Дальнейшее чтение на SmashingMag:

Безопасности

На протяжении всего нашего взаимодействия с этим объектом, мы поставляем параметры и используя функции для достижения нашей цели. Внутренние данные объекта заботятся о многих раздражающих аспектах, таких как защита от атак на впрыски с помощью S’L и обеспечение использования надлежащих типов данных.

Простота

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

Модульность

Мой любимый из всех является модульность. При составлении необработанных запросов трудно управлять часто используемыми битами, поскольку они являются лишь фрагментами кода S’L. WP_Queryделает покончить с этим, используя ассоциативный массив в качестве аргумента. Множество добра вытекает: вы можете объединить аргументы из разных мест, запустить массив функций содержание вашего сердца и манипулировать им в гениальных способов.

Начало работы

«Обычный» WordPress loop

Давайте сначала рассмотрим обычный цикл, а затем создадим тот же цикл с WP_Query помощью. Допустим, мы кодифицировали category.php файл.

<?php
   if(have_posts()) : 
      while(have_posts()) : 
         the_post(); 
?>

         <h1><?php the_title() ?></h1>
         <div class='post-content'><?php the_content() ?></div>

<?php
      endwhile;
   else : 
?>

      Oops, there are no posts.

<?php
   endif;
?>

Та же петля с использованием WP-кипри

<?php

   $args = array('cat' => 4);
   $category_posts = new WP_Query($args);

   if($category_posts->have_posts()) : 
      while($category_posts->have_posts()) : 
         $category_posts->the_post();
?>

         <h1><?php the_title() ?></h1>
         <div class='post-content'><?php the_content() ?></div>      

<?php
      endwhile;
   else: 
?>

      Oops, there are no posts.

<?php
   endif;
?>

Как вы можете видеть, нет большой разницы на всех! Давайте разобьем его:

  1. Построение запроса На странице категории, WordPress уже знает, что вы хотите перечислить сообщения из этой категории. Поскольку мы строим запрос с WP_Query нуля, используя, мы должны указать это сами. Мы углубимся немного глубже в это немного.
  2. Мгновенное воспроизведение класса и запрос для публикаций Путем мгновенности класса с построенной массив аргумент, WP_Query будет пытаться вытащить должности указаны и нагрузки других деталей.
  3. Создание цикла Вы можете использовать все обычные функции; просто не забудьте использовать их в качестве методов вашего объекта:
    • Вместо have_posts() , использовать $category_posts->have_posts() .
    • Вместо the_post() , использовать $category_posts->the_post() .
  4. Возобновить работу в обычном режиме После того как вы сделали выше, вы можете использовать все теги шаблонов вы узнали и любите.

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

<?php
   $temp_post = $post; // Storing the object temporarily
   $my_query = new WP_Query();
   while($my_query->have_posts()) {
      // Loop in here
   }
   $post = $temp_post; // Restore the value of $post to the original
?>

Копать глубже

Сила хорошего аргумента

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

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

<?php
   $args = array(
      'post_status' => 'future',
      'meta_query' => array(
         array(
            'key' => '_thumbnail_id',
            'value' => ’,
            'compare' => '!='
         )
      )
   );
   $slider_posts = new WP_Query($args);
?>

<?php if($slider_posts->have_posts()) : ?>

<div class='slider'>
   <?php while($slider_posts->have_posts()) : $slider_posts->the_post() ?>
      <div class='slide'>
         <?php the_post_thumbnail() ?>
      </div>
   <?php endwhile ?>
</div>

<?php endif ?>

Короткий, сладкий и совершенно понятно — просто красиво. И мы только что выцарапали поверхность.

Знайте свои по умолчанию

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

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

  • posts_per_pageПо умолчанию к значению, указанному в настройках чтения для количества сообщений для списка.
  • post_typeПо умолчанию post .
  • post_statusПо умолчанию publish .

Вы можете найти полный список параметров в Кодексе, конечно!

Массивы Awesome

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

  • Вы можете использовать массив для post_status вытягивания сообщений из нескольких различных состояний. Обратите внимание, что вы можете использовать строку any для получения сообщений из всех статусов.
  • Если вы используете пользовательские типы постов, вы будете рады услышать, что вы можете использовать массив для значения post_type параметра, а также.
  • Для параметров типа таксономии и так далее можно использовать массив для category__in tag__in обозначения множества значений.

Обработка таксономий

WP_Queryдостаточно хорошо, чтобы предложить простой способ сделать расширенные запросы таксономии, а также. Это особенно полезно для веб-сайтов со сложными настройками и для коммерческих тем с большими наборами функций. Используемый механизм называется tax_query . Давайте посмотрим на пример.

Скажем, у вас есть сайт все о фильмах. Вы храните фильмы в пользовательском типе поста «фильм»; у вас есть пользовательские таксономии для жанра, пользовательские таксономии для актеров, и вы используете регулярные ПР ‘категории, чтобы указать, насколько хорошо фильм. Давайте найдем все «Действие» фильмы в главной роли «Брюс Уиллис», которые не являются «Плохой»:

<?php
   $args = array(
      'post_type' => 'movie',
      'tax_query' => array(
         'relation' => 'AND',
         array(
            'taxonomy' => 'category',
            'field' => 'slug',
            'terms' => array('bad')
            'operator' => 'NOT IN'
         ),
         array(
            'taxonomy' => 'genre',
            'field' => 'slug',
            'terms' => array('action')
         ),
         array(
            'taxonomy' => 'actor',
            'field' => 'slug',
            'terms' => array('Bruce Willis'),
         )
      )
   );
?>

Хотя этот пример с жестким кодом будет полезен только для людей, которые любят Die Hard, это не трудно понять, как расширенный фильтр может быть построен, что позволяет пользователям фильтровать через ваш контент в любом случае, каким образом они хотят.

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

Развлечения с мета-данными

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

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

<?php
   $args = array(
      'post_type' => 'apartment',
       'meta_query' => array(
         'relation' => 'AND',
          array(
             'key' => 'persons',
             'value' => '4',
             'compare' => '>=',
             'type' => 'NUMERIC'
          ),
          array(
             'key' => 'balcony',
             'value' => '1',
             'type' => 'BINARY',
             'compare' => '='
          ),
          array(
             'key' => 'smoking',
             'value' => '0',
             'type' => 'BINARY',
             'compare' => '='
          )
       )
   );
?>

Опять же, это очень модульный, очень понятно. Чтобы узнать больше о параметрах, которые вы можете использовать, достаточно ознакомиться с разделом«Параметры пользовательских полей»в WP_Query документации.

Методы и свойства

После того как вы сделали запрос, вы можете уговорить много информации из вашего объекта. Вы можете найти полный список «Методы и свойства» в Кодексе. Вот те, которые я, как правило, используют большинство:

  • $queryОтображает строку запроса, передаваемую $wp_query объекту. Это очень полезно для устранения неполадок в некоторых продвинутых случаях.
  • $query_varsОтображает ассоциативный массив аргументов, которые вы прошли. Если вы делаете много смешивания и сопоставления перед прохождением аргументов, этот инструмент может быть полезным действительно, чтобы проверить, что все хорошо.
  • $postsСохраняет запрашиваемые сообщения из базы данных. Я редко использую это свойство, но это хорошо знать, что это, где ваши предметы приходят.
  • $found_postsУдобная мелочь, которая показывает общее количество найденных элементов (без ограничения, налагаемого posts_per_page аргументом).

С великой державой приходит большая ответственность

Хотя WP_Query дает вам много, чтобы играть вокруг с, он имеет свои недостатки. Многие люди (мое прошлое самоуправления включены) сходят с ума, когда они понимают, как легко стучать из запросов повсюду.

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

Убедитесь в том, чтобы проверить, что запрос по умолчанию держит на каждой странице. Какой смысл в создании нового запроса для последних сообщений на первой странице, если он там по умолчанию? Используйте то, что вы можете более одного раза, результаты кэша, и так далее.

Источник: smashingmagazine.com

Великолепный Журнал

Великолепный, сокрушительный, разящий (см. перевод smashing) независимый журнал о веб-разработке. Основан в 2006 году в Германии. Имеет няшный дизайн и кучу крутых авторов, которых читают 2 млн человек в месяц.

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

%d такие блоггеры, как: