Building efficient wordpress queries with wp_query

Содержание:

Начало вывода часто создает проблемы для студентов, когда они пишут свои отчеты. Заключение — это часть отчета, диссертации, исследования и т. Д., Где резюмируются моменты, к которым был обращен подход, и где устанавливается объем исследования, определенным образом определяющий позицию автора.

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

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

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

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

Функция tax_query WordPress

Tax_query используется для выполнения запросов на основе таксономий. «Таксономия» – это механизм группировки сообщений, ссылок или настраиваемых типов сообщений. При создании таксономии создается специальная переменная tax_query с использованием класса WP_Query.

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

Давайте посмотрим на простой пример отображения сообщений, помеченных термином “Изображение”, в настраиваемой таксономии “тип содержимого”:

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

Свойства классов

Совсем недавно
была добавлена возможность описания свойств непосредственно внутри класса,
например, так:

class Book {
         pages = 123;
 
         constructor(title, author, price) {
                   this.title = title;
                   this.author = author;
                   this.price = price;
         };
}

Причем, они
автоматически становятся частью самого объекта book1, а не базового
класса. Мы в этом можем легко убедиться, если выведем объект в консоль:

console.log(book1);

Вот что из себя
представляют классы в базовом представлении.

Видео по теме

JavaScript ООП #1: Прототипное наследование, свойство __proto__

JavaScript ООП #2: Свойство prototype

JavaScript ООП #3: Базовые свойства Object, методы create, getPrototypeOf и setPrototypeOf

JavaScript ООП #4: Классы — class, методы и свойства, Class Expression

JavaScript ООП #5: Наследование классов, переопределение методов, функция super

JavaScript ООП #6: Статические методы и свойства классов

JavaScript ООП #7: Приватные методы и свойства, оператор instanceof

JavaScript ООП #8: Примеси (Mixins). Что это, где и для чего используются

JavaScript ООП #9: Блоки try/catch/finally, оператор throw, проброс исключений

Внутренний и внешний интерфейсы

В объектно-ориентированном программировании свойства и методы разделены на 2 группы:

  • Внутренний интерфейс – методы и свойства, доступные из других методов класса, но не снаружи класса.
  • Внешний интерфейс – методы и свойства, доступные снаружи класса.

Если мы продолжаем аналогию с кофеваркой – то, что скрыто внутри: трубка кипятильника, нагревательный элемент и т.д. – это внутренний интерфейс.

Внутренний интерфейс используется для работы объекта, его детали используют друг друга. Например, трубка кипятильника прикреплена к нагревательному элементу.

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

Итак, всё, что нам нужно для использования объекта, это знать его внешний интерфейс. Мы можем совершенно не знать, как это работает внутри, и это здорово.

Это было общее введение.

В JavaScript есть два типа полей (свойств и методов) объекта:

  • Публичные: доступны отовсюду. Они составляют внешний интерфейс. До этого момента мы использовали только публичные свойства и методы.
  • Приватные: доступны только внутри класса. Они для внутреннего интерфейса.

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

Защищённые поля не реализованы в JavaScript на уровне языка, но на практике они очень удобны, поэтому их эмулируют.

А теперь давайте сделаем кофеварку на JavaScript со всеми этими типами свойств. Кофеварка имеет множество деталей, мы не будем их моделировать для простоты примера (хотя могли бы).

With Great Power Comes Great Responsibility

While gives you plenty to play around with, it does have its drawbacks. Many people (my past self included) go nuts when they realize how easy it is to bang out queries all over the place.

Keep in mind that more queries mean more server load. I’ve found that on hosted systems, complex queries can be especially naughty because they eat at your RAM, which is probably your scarcest resource.

Make sure to check out what the default query holds on each page. What’s the sense in creating a new query for the latest posts on the front page if it’s there by default? Use what you can more than once, cache results, and so on.

(al)

Создание модульного подхода

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

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

Этот запрос можно разделить на два на шаге « объединить с таблицей цен ». Таким образом, проще понять шаги, которые были применены к запросу Sales перед слиянием. Чтобы выполнить эту операцию, щелкните правой кнопкой мыши шаг Слияние с таблицей цен и выберите пункт извлечь предыдущее .

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

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

Примечание

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

Methods And Properties

Once you’ve made a query, you can coax a lot of information out of your object. You can find a full list of “” in the Codex. Here are the ones I tend to use most:

  • Shows you the query string passed to the object. This is quite helpful for troubleshooting in some advanced cases.

  • Shows an associative array of the arguments you’ve passed. If you do plenty of mixing and matching before passing arguments, this tool could be helpful indeed to check that all is well.

  • Holds the requested posts from the database. I rarely use this property, but it’s good to know that this is where your items come from.

  • A handy little thing that shows the total number of found items (without the limit imposed by the argument).

Пример из реальной жизни

Например, кофеварка. Простая снаружи: кнопка, экран, несколько отверстий… И, конечно, результат – прекрасный кофе! :)

Но внутри… (картинка из инструкции по ремонту)

Множество деталей. Но мы можем пользоваться ею, ничего об этом не зная.

Кофеварки довольно надёжны, не так ли? Мы можем пользоваться ими годами, и если что-то пойдёт не так – отнесём в ремонт.

Секрет надёжности и простоты кофеварки – все детали хорошо отлажены и спрятаны внутри.

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

Как мы увидим, в программировании объекты похожи на кофеварки.

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

WP_Query post meta

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

Мета-данные хранятся в виде пар ключ / значение. Ключ – это имя элемента метаданных, а значение – это информация. Значение можно увидеть в списке метаданных любого сообщения, к которому привязана информация.

Существует несколько функций WordPress для метаданных WP_Query для добавления, удаления и получения метаинформации.

WordPress get_post_meta

Функция get_post_meta извлекает мета-поле сообщения для сообщения.

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

meta_value WordPress

Функция WordPress meta_value позволяет получить запись с выбранным мета-ключом и мета-значением.
В качестве примера мы покажем, как фильтровать сообщения с meta_key, установленным как ‘show_on_firstpage’ и meta_value как ‘on’.

13. Класс WordPress WP_Meta_Query

Класс WP_Meta_Query – это базовый класс, используемый для реализации мета-запросов для Meta API. Этот объект класса можно использовать для генерации предложений SQL для фильтрации первичного запроса по ключам и значениям метаданных. WordPress хранит три типа метаданных поста, мета пользователя и мета комментария. Вы можете рассматривать этот класс как помощник для основных классов запросов, таких как WP_Query, используемых для фильтрации их результатов по метаданным объекта.

Чтобы создать объект класса WP_Meta_Query, вы можете передать несколько аргументов в виде парного массива ключ => значение. Доступные ключи, которые эта функция принимает в качестве аргументов:

  • meta_key
  • meta_value
  • meta_type
  • meta_compare

Ниже приведен пример простого использования конструктора для создания объекта класса WP_Meta_Query.

WordPress meta_query сравнить

Иногда вам может потребоваться сравнить значения, соответствующие ключам метаданных. Механизмом по умолчанию для сравнения meta_values ​​является оператор ‘=’, который проверяет равенство. Если вы хотите выбрать из других вариантов, например ‘! = ‘,’> ‘,’ <‘и т. д., тогда вы можете использовать аргумент сравнения meta_query. Вы должны указать его как аргумент сравнения в массиве arguments.

Возможные значения: ‘=’, ‘! =’, ‘>’, ‘> =’, ‘<‘, ‘<=’, ‘LIKE’, ‘NOT LIKE’, ‘IN’, ‘NOT IN’, ‘ BETWEEN ‘,’ NOT BETWEEN ‘,’ EXISTS ‘(только в WP> = 3.5) и’ NOT EXISTS ‘(также только в WP> = 3.5). Значения «REGEXP», «NOT REGEXP» и «RLIKE» были добавлены в WordPress 3.7.

Защищённое свойство «waterAmount»

Давайте для начала создадим простой класс для описания кофеварки:

Прямо сейчас свойства и публичные. Мы можем легко получать и устанавливать им любое значение извне.

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

Защищённые свойства обычно начинаются с префикса .

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

Так что наше свойство будет называться :

Теперь доступ под контролем, поэтому указать воду ниже нуля не удалось.

Предостережения

Класс безусловно крут. В моей практике он используется практически везде и всегда. Однако и у него есть свои минусы. Следует знать:

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

Свойства:

Во всех последующих примерах будет использоваться объект, созданный в начале поста, ну то есть двумя строчками выше

  • $query (массив) — параметры созданного объекта,

    print_r($myquery->query);
    /*
    Array (
     => 1
     => comment_count
     => 5
    )
    */
  • $query_vars (массив) — все параметры объекта, включая те, которые не были указаны при создании,

    print_r($myquery->query_vars);
    /*
    Array (
     => 1
     => 5
     => comment_count
     =>
     => 0
     => 0
     =>
     =>
     =>
     =>
     => 0
     =>
     =>
     =>
     => 0
     =>
     =>
     =>
     => 0
     => 0
     => 0
     => 0
     => uncategorized
     =>
     =>
     =>
     =>
     =>
     => 0
     =>
     =>
     =>
     =>
     =>
     =>
     =>
     => Array (  => 1 )
     => Array ( )
     => Array ( )
     => Array ( )
     => Array ( )
     => Array ( )
     => Array ( )
     => Array ( )
     => Array ( )
     => Array ( )
     =>
     =>
     => 1
     => 1
     => 1
     =>
     =>
     => 50
     =>
     => DESC
    )
    */
  • $posts (массив) — содержит запрошенные посты,
  • $post_count (целое) — количество запрошенных постов,

    echo $myquery->post_count;
  • $found_posts (целое) — общее количество постов, удовлетворяющих условиям,
  • $max_num_pages (целое) — общее количество страниц, по сути является отношением $found_posts / $posts_count,
  • $current_post (целое) (доступен только в цикле) — индекс текущего поста при выводе, номер по порядку,
  • $post (объект) (доступен только в цикле) — содержит информацию о текущей записи.

    $obj = $myquery->post;
    /*
    stdClass Object (
     => 257  => 1 
     => 2012-04-20 08:45:21 
     => 2012-04-20 08:45:21 
     => 
     => Liber perfecto definitionem duo ne. 
     => 
     => publish 
     => open 
     => open 
     => 
     => liber-perfecto-definitionem-duo-ne
     => 
     => 
     => 2012-04-20 08:45:37 
     => 2012-04-20 08:45:37 
     => 
     => 0 
     => https://misha.blog/?p=257 
     => 0 
     => post 
     => 
     => 1 
     => raw
    )
    */
    echo $obj->ID;

Pulling WooCommerce Products instead of WordPress Posts

Ok, so this base code takes care of the hard part; pulling the recent posts. But there’s quite an obvious issue for our needs, since we’re looking to display our latest WooCommerce products, not posts. The reason that posts are displayed by default is due to the post_type parameter; if left unset in the code then it will remain at its default setting, which is to look for posts. So all we need to do is change the query parameters array to include the post_type parameter and tell it to grab products, not posts:

$params = array(
        'posts_per_page' => 5, 
        'post_type' => 'product'
);

As you can see, all we’ve done is added a post_type variable to the array, and set it’s value to “product”; the query will now look for WooCommerce products instead of posts.

That was good for a little warm-up, but let’s get a bit more sophisticated!

WordPress add_action

Функция WordPress add_action используется для привязки функции к определенному действию. Действия – это перехватчики, которые запускаются в определенные моменты во время выполнения или при возникновении определенных событий.

Объект WP_Query также поддерживает add_action (). С помощью хука действия ‘the_post’ вы можете изменить объект сообщения сразу после того, как он будет запрошен.

Хук pre_get_posts вызывается после создания объекта запроса, но до выполнения фактического запроса. Таким образом, вы можете использовать его для изменения запросов WordPress до их выполнения.

Вы можете обратиться к справочнику по кодексу для получения подробной информации о дополнительных действиях, поддерживаемых объектами WP_Query.

Рейтинг
( Пока оценок нет )
Editor
Editor/ автор статьи

Давно интересуюсь темой. Мне нравится писать о том, в чём разбираюсь.

Понравилась статья? Поделиться с друзьями:
Люкс-хост
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: