Категории Хуков — WP_Query — WordPress


Содержание материала:

Что такое WordPress хуки и как их использовать?

Что такое хуки? Простыми словами хуки это функции wordpress, к которым можно привязать свои функции. В переводе с английского hook это крюк, таким образом вы как бы привязываетесь к стандартной функции. Например, на функцию удаления записи, привязываем свою функцию, которая будет срабатывать только при удалении поста. С помощью грамотного использования хуков, можно значительно расширить базовый функционал WordPress.

Я на маленьком примере покажу, как можно использовать хуки WordPress. За основу возьмем хук публикации поста publish_post, и создадим для него функцию, которая будет добавлять пользователю балы за добавление постов.

Как использовать хук

Хуки используются либо в плагинах, или в functions.php. Чтобы вызвать хук нужно прописать:

publish_post – название хука, все хуки можно посмотреть на официальном сайте WordPress Codex.

add_point – Название функции, которую вы создаете.

Пример функции с хуком

В моем случае функция работает таким образом:

Пользователь добавляет запись, срабатывает хук который вызывает функцию, в которой происходит вся магия �� В функции я работаю с классом $wpdb->update, где обновляю таблицу с балами конкретного пользователя. В уроке insert» href=»https://wp-query.ru/chto-takoe-wpdb-insert-ili-sozdaem-obratnuyu-svyaz-na-primere-chast-1/» target=»_blank»>что такое $wpdb->insert, я рассказывал о классе $wpdb->insert на основе которого вы можете сделать свою функцию с использованием $wpdb->update, данный класс работает аналогичным образом.

Вот как примерно выглядит конструкция с использованием хука:

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

Вот функция с обновлением баллов:

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

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

Что такое хуки в WordPress?

WordPress является мощной платформой для создания сайтов любой сложности. Помимо простого блога, Вы сможете создать на базе этого “движка” корпоративный сайт, интернет-магазин, аукцион и другие виды популярных на сегодняшний день сайтов. В WordPress существуют специальные инструменты, обеспечивающие расширяемость и масштабируемость “движка”, – хуки . Они успешно используются во время разработки плагинов и тем.

Что такое хуки и зачем они нужны?

Генерация страницы в WordPress – это целый набор функций и запросов к базе данных. При этом сам “движок” и тема работают вместе для вывода контента. Браузер интерпретирует все эти данные и объединяет их в одну веб-страницу, которую в итоге увидит посетитель сайта.

Во всем коде WordPress разработчики включили так называемые “крючки”, чтобы разработчики могли “повесить” на них свой собственный код. Эти крючки и есть хуками.

Хуки в WordPress бывают двух видов:

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

Фильтры позволяют перехватывать и изменять данные по мере их обработки. Например, Вы можете захотеть вставить другой класс CSS в HTML-элемент WordPress или изменить некоторые блоки Ваших страниц.

Работу хуков можно рассмотреть на примере. Представьте себе, что система WordPress является большим предприятием, которое приглашает внешних подрядчиков для выполнения тех или иных задач. Такими подрядчиками являются хуки, которые не имеют постоянного места работы на предприятии. Они будут приглашены лишь в случае необходимости. Таким местами обитания подрядчиков (хуков) могут быть:

  • плагины;
  • файл functions.php внутри родительской или дочерней темы.

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

Каждый крючок помечен определенным именем (например, wp_head ), что соответствует определенной части процесса предприятия WordPress (в случае wp_head – процесс создания раздела в HTML-структуре конечной страницы). Получается, что крючки выезжают в вестибюль офиса предприятия, чтобы подрядчики могли ездить на них, и они делают это в определенном порядке. Например, хук wp_head выезжает и возвращается обратно до завершения , а крюк wp_footer возвращается прямо перед завершением и т.д. Таким образом, подрядчик всегда направляется на свой крючок, на определенную часть работы на предприятии.

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

Подытоживая все вышесказанное получается, что крючки – это то, что “приглашает” внешний код (от functions.php и плагинов и т.д.) в определенные области обработки PHP WordPress. Они могут делать что угодно: добавлять что-либо на страницу или делать совсем другие вещи, например, регистрировать ошибку или даже отправлять электронную почту.

Рассмотрим каждый из видов хуков более подробно.

Экшены

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

Функция wpschool_action_example() означает, что это экшен (или действие) и не содержит никаких аргументов. В функции присутствует один единственный оператор – echo “Текст в шапке сайта.” Это то, что делает функция. echo – это команда PHP, которая выводит что-либо на экран.

В строке add_action( ‘wp_head’, ‘wpschool_action_example’ ) содержится служебная команда add_action(), которая “подвешивает” функцию wpschool_action_example() на крючок экшена wp_footer. В итоге текст “Текст в шапке сайта.” будет напечатан в самом начале пашки (или хедера), там, где автор темы разместил крючок действия wp_head.

На реальном сайте это будет выглядеть следующим образом:

Также этот пример можно переделать для футера сайта,изменив лишь название крючка:

Фильтры

Работу фильтров рассмотрим на примере, в котором к названию публикации добавим строку “Фильтр:”.

wpschool_filter_example() – это имя функции для фильтра the_title . Видно, что она имеет аргумент $title. Это служебная переменная WordPress, в которой содержится название публикации. В итоге строка return ‘Фильтр: ‘ . $title добавляет к названию текст “Фильтр:”. Служебная директива return возвращает конечный результат WordPress-обработчику, который продолжает свою работу. Эта строка буквально означает следующее: “Взять название публикации, добавить к нему текст, а затем передать его обратно ядру WordPress”.

Результат на сайте выглядит следующим образом:

Видно, что фильтр изменил название всех записей и страниц WordPress-сайта, причем не только в списке записей, то также в меню и виджете свежих записей.

В качестве заключения

В WordPress хуки используются для расширения стандартных возможностей “движка”. Это могут быть как простое добавление текста где-либо на сайте, так и сложные выборки, например, для плагина интернет-магазина WooCommerce .

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

Система перехвата WordPress действительно является мощной платформой для полноценной разработки WordPress, поэтому не бойтесь экспериментировать, добиваясь нужного Вам результата.

WordPress — How to get the category name in WP_Query

I’m querying custom posts types and can’t get the name of the category the post belongs to. Feel like I’ve tried everything but sure it must be possible!

Does anybody know the code that would go between the below to get the category name?

Thanks in advance for any help!

1 Answer 1

As it’s a custom post type get_the_terms() is required

Note that you pass the custom post type into the WP_Query — ‘location’ in this case, however you need the custom taxonomy in get_the_terms() ‘gd_placecategory’

Not the answer you’re looking for? Browse other questions tagged wordpress wp-query or ask your own question.

Related

Hot Network Questions

Subscribe to RSS

To subscribe to this RSS feed, copy and paste this URL into your RSS reader.

site design / logo © 2020 Stack Exchange Inc; user contributions licensed under cc by-sa 4.0 with attribution required. rev 2020.11.6.35358

Полезные хуки для WordPress

Список хуков для WordPress движка.

Привет, друзья! Решил с вами поделиться несколькими хуками для WordPress, которыми я систематически сам пользуюсь. Думаю, они вам будут тоже полезны. Так что, сегодня мы с вами будем «кавырять» код темы и оптимизировать его в плане seo. Но будем это делать так, чтобы при обновлении темы всё не затерлось. Давайте для начала разберемся что такое хуки для WordPress и для чего они вообще!?

Хук для ВордПресс – это специальная функция, которая помогает прицепиться «на лету» к основным функциям и изменить их поведения. Это что-то вроде вкраплений. Вы ловите нужную функцию, изменяете её данные как вам надо и воспроизводите её уже измененную. При этом, вы как бы не изменяете код темы или самого движка, а по факту изменения происходят. И любые обновления темы или движка WP, не смогут затронуть ваши изменения.

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

Я не зря обрамил фразу «сео ошибки» в кавычки. Для англоязычного интернета, это вовсе не считается ошибками. Но мы же, обязаны подстраиваться не только под поисковую систему Google, но и под Яндекс тоже. А как известно, Яндекс относиться к определенным стандартам по другому. И чтобы угодить и тому и другому, мы и будем сегодня колдовать. Давайте уже приступим, а то заболтался я что-то.

Отключение замены на «Умные кавычки».

Наверняка вы уже столкнулись с проблемой, что WordPress по умолчанию показывает вместо простых кавычек, так называемые «Умные кавычки». И всё бы ничего, только в тексте, если не поставить пробел перед кавычкой показывается только закрывающая. В итоге, выглядит это не очень красиво. Приведу пример.

Вы в тексте решили написать какой-то текст с кавычками, например: rel=«canonical«. Вроде написали с нормальными двойными кавычками. Но при публикации статьи, вы видите следующее: rel=»canonical». Как то не красиво, согласны?

Существует 2 способа избавиться от таких «Умных кавычек» (их ещё называют французскими кавычками):

  1. Ставить перед каждой открывающей кавычкой пробел (rel= «canonical»). Но это как-то не красиво всё равно выглядит.
  2. Отключить автоматическую замену кавычек специальным хуком. В этом случае, все кавычки будут именно такими, какими вы их хотите видеть.
Топ-пост этого месяца:  Динамические значения в произвольных полях

Итак, хук который отключит автоматические «Умные кавычки» нужно поместить в файл функций functions.php вашей темы.

Выравнивание текста по ширине.

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

  1. С левой стороны.
  2. По центру.
  3. С правой стороны.

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

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

Отключение Google шрифтов.

Обычно, темы подключают сторонние Google шрифты, на что даже сам Google ругается . Забавно получается. Так вот, зачастую отключая эти сторонние шрифты, сайт ни чуть не изменяется. Разве что шрифт становиться четче. Ну, конечно если у вас на сайте не подключен какой-нибудь «заковырестый» шрифт. В этом случае, он просто пропадет и будет показываться обычный, стандартный шрифт.

Плюс данного метода – Вы избавляетесь от стороннего подключения. Тем самым, уменьшая время загрузки страницы. Что безусловно будет плюсом для вашего сайта.

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

Чтобы отключить поддержку встроенных Гугл шрифтов, нужно добавить в тот же файл функций следующий код:

Удаление заголовков H2-H6 из сайдбаров.

Сначала прочитайте до конца, потом делайте.

Я уже упомянул, что Google в большинстве случаев относиться к множеству заголовков H2-6 на страницах, лояльно. А вот Яндекс не особо. Да и вообще, опытные сеошники, рекомендуют не увлекаться этими тегами в тех местах, где они не нужны. А заголовки в сайдбарах, это те места, где они не нужны точно.

Я активно пользуюсь всеми заголовками в разметке статей. Но вот в сайдбарах, я рекомендую убирать их, за ненадобностью. По умолчанию, разработчики тем выводят заголовки в сайдбарах с помощью тегов H2-6. В разных темах, теги могут быть разные. У меня были теги H4, у вас могут быть и H3 или даже H2. Выглядит код регистрации боковых колонок примерно вот так:

Чтобы переделать вывод заголовков, мало просто найти подобный код и поменять h4 на div. Потому-что при следующем обновлении темы, ваши правки кода затрутся и придется делать это заново. А если вы много чего уже делали в шаблоне, вы попросту можете не вспомнить про это.

Чтобы такого не повторялось, я рекомендую сделать три вещи:

  1. Обязательно установить и настроить дочернюю тему.
  2. Отключить регистрацию старых сайдбаров и подключить новые.
  3. И всё это сделать в файле functions.php дочерней темы.

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

Я специально даю вам код именно в виде функции, так как этой функцией можно отключить сразу несколько сайдбаров. Чтобы узнать точное название сайдбаров, нужно найти функцию подключения их в теме и подсмотреть там. Обычно, их регистрируют в файле functions.php родительской темы, либо в отдельном файле (он может называться либо widget, либо sidebar). Функция регистрации называется register_sidebar.

Чтобы зарегистрировать новый сайдбар, воспользуйтесь данным хуком:

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

Отключение ненужных виджетов.

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

  1. Избавитесь от возможных дублей страниц (обычно их генерирует виджет Календарь).
  2. Уменьшите число обращений к базе данных (обращается к БД каждый виджет).

Как я уже упомянул, каждый виджет по умолчанию, обращается к базе данных. При чем это происходит не зависимо от того, используется он на странице или нет. То есть, каждый раз, как загружается страница (любая на сайте), каждый виджет обращается по минимум одному разу к базе данных. Отключив не использующие, вы немного ускорите загрузку своего сайта. А теперь, давайте посмотрим как это делается:

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

Удаление файлов license.txt и readme.html.

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

Чтобы автоматически проверять наличие файлов license.txt и readme.html, а потом их сразу удалять, воспользуйтесь ниже представленным хуком. Он будет автоматически проверять на наличие этих файлов и если они присутствуют, хук удалит их. Код нужно поместить, в тот же файл functions.php:

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

Создание своих миниатюр и удаление лишних.

Вы наверняка уже знаете, что WordPress по умолчанию, создает для каждой загруженной картинки 3 версии миниатюр. Плюс к этому, каждая тема, создает ещё от трех, до 7 миниатюр в добавок. И того, для каждой картинки создается до 10 дополнительных. А если у вас на сайте картинок очень много, то в скором времени, ваш сайт разрастется до немыслимых размеров и вам придется увеличивать тариф хостинга.

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

Чтобы отключить стандартные миниатюры ВордПресса, нужно перейти в Настройки > Медиафайлы. На скрине ниже, я покажу какие можно удалить, а какие нельзя:

То, что отмечено красной рамкой выключать нельзя. Эта миниатюра отвечает за показ картинок в галерее WordPress. Остальные две, можно отключить поставив цифру «0».

Теперь, переходим к миниатюрам создаваемым самой темой. Для этого переходим в родительскую тему и ищем в файле functions.php регистрацию стандартных размеров. Функция регистрации называется add_image_size. Ищите эту функцию и скопируйте названия подключаемых миниатюр. После этого, вставьте эти названия в следующую функцию для их отключения:

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

А чтобы зарегистрировать новый размер миниатюры, вам нужно в конце выше приведенного кода добавить хук регистрации:

Пересоздание миниатюр после отключения.

После того, как вы отключили лишние миниатюры и включили свою, вы не увидите разницы. Дело в том, что эти хуки отключают и подключают размеры в реальном времени. А все картинки загруженные ранее, так и остались в папке uploads. Но если у вас их там уже сотни или тысячи, то удалять их вручную, то ещё занятие. Поэтому, предлагаю установить плагин Force Regenerate Thumbnails и пересоздать миниатюры заново. Плагин автоматически удалит все лишние миниатюры и создаст только те размеры, которые вы включили.

Важно! После всех манипуляций с миниатюрами, обязательно сделайте две очень важные вещи:

  • Первым делом нужно почистить все кэши. Это касается и плагинов и кэша в браузере.
  • Вторым делом нужно пробежаться по сайту, статьям, и проверить, как отображаются картинки. Если где-то отображаются криво (сильно обрезаны и т.д.), замерьте размер и зарегистрируйте его. После этого пересоздайте ещё раз миниатюры.

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

Внимание! Могут полететь картинки в статьях. В этом случае, вам придется эти картинки передобавить. Сделать это можно кликнув на значок битой картинки в редакторе и просто передобавить. Искать заново их не надо, они уже есть, нужно будет просто нажать кнопку «Заменить».

Циклические ссылки в меню и категориях + rel= «canonical».

Ну, и закончить статью, можно хуками от циклических ссылок на сайте и хуком для «правильного» атрибута rel=canonical. В этой статье я их не буду дублировать (не хочу портить уникальность статей), так что, если нужно, переходите в соответствующие посты. Там по мимо этого море нужной для вас информации, раз уж решили оптимизировать WordPress, оптимизируйте его по полной!

На этом у меня сегодня всё. Как обычно, я с вами не прощаюсь и жду ваших комментариев к этой статье. До встречи, на страницах блога WPMaster.KZ

Друзья, блогу нужна ваша поддержка. Если вам понравилась статья или она вам помогла решить задачу, поделитесь ею в одной из соцсетей. Этим вы поможете дальнейшему развитию. Всем активистам — спасибо!

15 свежих хаков для WordPress

Свежий набор хаков для WordPress поможет загружать Jquery из репозиториев Гугла, удалить админ-панель нового WordPress, добавить полезные кнопки в визуальный редактор, сделать постраничную навигацию без использования плагинов и делать еще много чего полезного. Для тех, кто не в курсе, что такое хаки — небольшое описание по работе с ними.

Итак, что же такое хаки WordPress? Это небольшие фрагменты PHP кода, которые чаще всего вставляются в файл functions.php, он содержится в шаблоне вашего блога. Если такого файла нет — нужно его создать и уже в новый файл добавлять код. Я настоятельно рекомендую делать бэкап, прежде чем производить какие-либо манипуляции с файлами темы.

Исключаем страницы из результатов поиска

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

Добавляем дополнительные кнопки в визуальный редактор

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

Добавляем все типы записей в поиск

С приходом WordPress 3 появилась возможность использовать разные типы записей блога. Галерея, видео, ссылка — все это так называемые «custom post types», нестандартные типы записей. По умолчанию, в поиске они не присутствуют. В коде два типа реализации этого хака — первый определяет, какие конкретно типы будут включены в поиск, второй включает все.

Загружаем JQuery из репозитория Google

Один из самых полезных хаков, на мой взгляд. Многие красивости в шаблонах и плагинах используют JQuery, причем грузят ее с вашего хостинга, замедляя общую скорость загрузки сайта. Выход простой — вставляем данный хак, удаляем все остальные упоминания о загрузке JQuery из шаблона или плагина. Распараллеливаем загрузку, снижаем общую нагрузку на ваш хостинг — сплошное удовольствие. Подобным образом можно загрузить любую другую библиотеку, а заменив URL — она будет грузиться с вашего адреса.

Топ-пост этого месяца:  Выбор инструментов для UX дизайна

Запрещаем деактивацию и изменение плагинов

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

Запрет на смену шаблона

Все тот же любопытный клиент, но теперь он лезет в шаблоны. А мы ему не дадим этого сделать Код удаляет меню «Внешний вид» из главного меню админки.

Скрываем оповещения об обновлении WordPress

Иногда неизвестно, как отреагирует блог на обновление WP, не будет ли проблем. Без бэкапа не обойтись, опять же… Поэтому лучше не давать клиенту делать обновления самостоятельно и не показывать что они есть. Да и для себя я, например, отключил. О новой версии и так знаю, как руки доходят — обновляю, а лишний раз отвлекать — не дело.

Режим «Осторожно, работают люди!»

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

Как добавить или убрать ссылку в админ-панель

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

  • my-account / my-account-with-avatar : иконочка пользователя, под кем произведен вход и ссылка на профиль.
  • get-shortlink : короткая ссылка на пост
  • edit : ссылка на редактирование поста или страницы
  • new-content : выпадающее меню «Добавить»
  • comments : «Комментарии»
  • appearance : «Внешний вид»
  • updates : «Обновления»

Список потомственных страниц

Интересная штука, может кому и пригодится — выводит список страниц-потомков данной статьи. Можно всунуть куда нибудь в шаблон.

Постраничная навигация без плагинов

Теперь можно добавить постраничную навигацию в любом месте вашей темы, используя функцию pagination(), примерно так:

Главное — вставлять ее не в самом цикле вывода постов, но в теле условия if( have_post() ), это важно.

Сколько раз просмотрели запись?

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

А там, где нужно выводить количество просмотров — добавим еще один кусочек PHP кода:

Перенаправление на запись, если она одна

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

Отображение любой RSS-ленты

Код использует файл rss.php, встроенный в WordPress, который вытягивает из указанной ленты определенное количество записей. Этот код используется непосредственно в нужном месте шаблона, НЕ внедряется в functions.php .

Отключение админ-панели

Если совсем надоела, как мне иногда — можно просто отключить ее.

Как создать продвинутый поиск в WordPress с помощью WP_Query

Дата публикации: 2020-04-18

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

Большая часть преимуществ WordPress идет из его гибкой архитектуры данных, с помощью которой разработчики могут широко настраивать свои системы с помощью пользовательских типов постов, таксономий, а также пользовательских полей. Однако когда речь заходит о поиске в WordPress, то пользователю предоставляется всего одно поле, которое зачастую ведет себя настолько неадекватно, что администраторы загружают внешние поисковые системы наподобие Google Custom Search или сторонних плагинов.

Статья разделена на 2 части. В первой я расскажу в теории, как обработать запрос пользователя, начиная от передачи URL, процесса выполнения запроса и до вывода результата. А вторая часть это конкретное применение полученной теории из первой части, в ней мы создадим свою продвинутую поисковую систему. Давайте разберем парочку ключевых концепций.

Запросы пользователя

Когда пользователь переходит по ссылке или вбивает URL определенной страницы вручную, WordPress выполняет серию операций, хорошо описанную в Query Overview. Если коротко, то происходит следующее:

WordPress разбирает запрашиваемый URL на набор параметров (которые называются спецификация запроса).

Задаются все переменные «is_», связанные с запросом.

Бесплатный курс «Основы создания тем WordPress»

Изучите курс и узнайте, как создавать мультиязычные темы с нестандартной структурой страниц

Спецификация запроса конвертируется в MySQL запрос, который посылается в базу данных.

Полученные из БД данные хранятся в объекте $wp_query.

Затем WP обрабатывает ошибку 404.

Посылаются HTTP заголовки блога.

Инициализируются переменные цикла.

По правилам иерархии выбирается шаблон.

WordPress запускает цикл.

Первым происходит парсинг URL строки, так что давайте разберем строки запроса и переменные.

Переменные WP Query: стандартные и пользовательские

В кодексе говорится: «Пользователи или разработчики WordPress могут использовать массив переменных запроса для поиска контента определенного типа или в качестве дополнительного функционала в дизайне темы и/или плагина.»

Другими словами, переменные запроса WP определяют результат выполнения запроса в БД. По умолчанию в WP доступны переменные запроса типа private и public. В кодексе о таких переменных говорится: Публичные переменные запроса это переменные, доступные напрямую через URL запроса из формы. example.net/?var1=value1&var2=value2


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

10 полезных хук-хаков для WordPress

ВВЕДЕНИЕ

Хуки являются очень полезными фишками в WordPress. Они позволяют как бы «посадить» пользовательскую функцию «на крючок» функции существующей, разрешая тем самым изменять функциональность WordPress без внесения изменений в файлы ядра движка. В этой статье мы представляем Вам 10 особенно полезных, готовых к использованию хуков для WordPress, с примерами и пояснениями их исходников.

ЧТО ТАКОЕ ХУК?

Для достижения определенного эффекта нам нужно слегка изменить принцип работы WordPress. Некоторые модификации необходимо внести в файлы, которые были названы разработчиками файлами ядра – они нужны для того, чтобы WordPress работал должным образом.
Но изменение файлов ядра – плохая идея: это может создать брешь в системе безопасности блога. Также, все модификации исчезнут, как только Вы обновите движок до новой версии.
Однако, расширение функциональности все же необходимо. Для этого разработчиками был придуман Plugin API.
Хуки являются одним из главных блоков для построения плагинов. Почти каждый подключаемый плагин использует хуки для расширения функциональности WordPress.

КАК ИСПОЛЬЗОВАТЬ ХУКИ В ВАШЕМ БЛОГЕ

Пока Вы не написали свой плагин, Вы должны записать хуки в файл functions.php. Этот файл находится в директории wp-content/themes/yourtheme (где /yourtheme – директория, в которой находится текущая тема).
Вот пример, который показывает, как подключить Вашу пользовательскую функцию к функции ядра движка:

В этом примере мы подключили пользовательскую функцию myCustomFunction() к функции ядра publish_post(). Функция myCustomFunction() будет выполняться при каждом выполнении функции publish_post().
Конечно, мы можем также удалить хук, используя функцию remove_action():

1. ОТКЛЮЧАЕМ АВТОМАТИЧСКОЕ ФОРМАТИРОВАНИЕ В WORDPRESS

Проблема.

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

Решение.

Просто вставьте в файл functions.php нижеследующий код:

  1. function my_formatter ( $content ) <
  2. $new_content = » ;
  3. $pattern_full = ‘<(\[raw\].*?\[/raw\])>is’ ;
  4. $pattern_contents = ‘<\[raw\](.*?)\[/raw\]>is’ ;
  5. $pieces = preg_split ( $pattern_full , $content , — 1 , PREG_SPLIT_DELIM_CAPTURE ) ;
  6. foreach ( $pieces as $piece ) <
  7. if ( preg_match ( $pattern_contents , $piece , $matches ) ) <
  8. $new_content .= $matches [ 1 ] ;
  9. > else <
  10. $new_content .= wptexturize ( wpautop ( $piece ) ) ;
  11. >
  12. >
  13. return $new_content ;
  14. >
  15. remove_filter ( ‘the_content’ , ‘wpautop’ ) ;
  16. remove_filter ( ‘the_content’ , ‘wptexturize’ ) ;
  17. add_filter ( ‘the_content’ , ‘my_formatter’ , 99 ) ;

После того, как Вы это сделали, можете использовать тэг [raw] для того, чтобы текст поста был не отформатирован автоматически:

[raw]This text will not be automatically formatted.[/raw]

Объяснение кода.

Первым делом, мы создаем функцию, которая, основываясь на регулярных выражениях, находит тэг [raw] в содержании Вашего поста.
Далее, мы привязываем нашу функцию my_formatter() к функции the_content(), что означает выполнение нашей функции всякий раз, когда вызывается функция the_content().
Для того, чтобы отключить автоформатирование, мы использовали функцию remove_filter().

2. ОПРЕДЕЛЯЕМ БРАУЗЕР ПОСЕТИТЕЛЯ ПРИ ПОМОЩИ ХУКОВ

Проблема.

Кросс-браузерная совместимость – это наиболее распространенная проблема в web-разработке. Вы сэкономите много нервов и времени, если сможете определить браузер пользователя, зашедшего на Ваш блог, а затем создав CSS-класс для тэга body под каждый из браузеров.

Решение.

Ничего сложного: просто вставьте нижеследующий код в файл functions.php, сохраните его – все готово!

  1. add_filter ( ‘body_class’ , ‘browser_body_class’ ) ;
  2. function browser_body_ >( $classes ) <
  3. global $is_lynx , $is_gecko , $is_IE , $is_opera , $is_NS4 , $is_safari , $is_chrome , $is_iphone ;
  4. if ( $is_lynx ) $classes [ ] = ‘lynx’ ;
  5. elseif ( $is_gecko ) $classes [ ] = ‘gecko’ ;
  6. elseif ( $is_opera ) $classes [ ] = ‘opera’ ;
  7. elseif ( $is_NS4 ) $classes [ ] = ‘ns4’ ;
  8. elseif ( $is_safari ) $classes [ ] = ‘safari’ ;
  9. elseif ( $is_chrome ) $classes [ ] = ‘chrome’ ;
  10. elseif ( $is_IE ) $classes [ ] = ‘ie’ ;
  11. else $classes [ ] = ‘unknown’ ;
  12. if ( $is_iphone ) $classes [ ] = ‘iphone’ ;
  13. return $classes ;
  14. >

После того, как Вы сохраните файл, функция автоматически будет добавлять CSS-класс, соответствующий пользовательскому браузеру, для тэга body:

Объяснение кода.

WordPress имеет глобальные переменные, которые возвращают true, если пользователь использует соответствующий браузер. Если пользователь использует браузер Google Chrome, то переменная $is_chrome примет значение true. Вот для чего мы и создаем функцию browser_body_class(). После этого мы присоединяем ее к WordPress функции body_class().

3. ОПРЕДЕЛЕНИЕ ТЕКСТА ПО УМОЛЧАНИЮ В РЕДАКТОРЕ TinyMCE

Проблема.

Многие блоггеры почти всегда используют для своего блога один и тот же формат. Сообщения в моем блоге WpRecipes.com всегда отображаются одинаково: текст, код, еще немного текста.
Можно сэкономить немало времени, если научить TinyMCE отображать какой-нибудь текст по умолчанию.

Решение.

Как всегда, решением является хук. Копируем код в файл functions.php и смотрим, как он работает.

  1. add_filter ( ‘default_content’ , ‘my_editor_content’ ) ;
  2. function my_editor_content ( $content ) <
  3. $content = «If you enjoyed this post, make sure to subscribe to my rss feed.» ;
  4. return $content ;
  5. >
Объяснение кода.

Этот код хоть и простой, но очень мощный. Просто создаем функцию, которая возвращает требуемый текст (в этом примере мы определяем текст, который спрашивает у посетителей о подписке на RSS-ленту), и присоединяем ее к WordPress-функции default_content(). Вот так.

4. ВСТАВЛЯЕМ КОНТЕНТ АВТОМАТИЧЕСКИ ПОСЛЕ КАЖДОГО ПОСТА

Проблема.

В большинстве блогов для вывода контента после каждого поста файл single.php, но вот беда: этот контент не будет отображаться в RSS-ленте. Хуки помогут исправить эту проблему.

Решение.

Все то же самое – просто копируем следующий код в файл fucntions.php.

  1. function insertFootNote ( $content ) <
  2. if ( ! is_feed ( ) && ! is_home ( ) ) <
  3. $content .= «

Enjoyed this article?

Subscribe to our RSS feed and never miss a recipe!

Объяснение кода.

Суть функции insertFootNote() проста: он лишь конкатенирует желаемый текст к переменной $content, в которой хранится содержание поста.
Затем, мы присоединяем нашу функцию insertFootNote() к функции the_content().
Видите в строке 2 вот такой код:

Если Вам нужно, чтобы текст попадал в RSS-ленту, то замените предыдущий код на этот:

5. ОТКЛЮЧАЕМ СООБЩЕНИЕ С ПРОСЬБОЙ ОБНОВИТЬСЯ В ПАНЕЛИ УПРАВЛЕНИЯ WORDPRESS

Проблема.

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

Решение.

Просто вставьте следующий код в файл fucntions.php.

  1. if ( ! current_user_can ( ‘edit_users’ ) ) <
  2. add_action ( ‘init’ , create_function ( ‘$a’ , «remove_action( ‘init’, ‘wp_version_check’ );» ) , 2 ) ;
  3. add_filter ( ‘pre_option_update_core’ , create_function ( ‘$a’ , «return null;» ) ) ;
  4. >

После того, как Вы сохраните файл functions.php, сообщения Вы больше не увидите.

Объяснение кода.

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

6. ОТКЛЮЧАЕМ АВТОСОХРАНЕНИЕ ПОСТОВ

Проблема.

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

Решение.

Для того, чтобы отключить автосохранение поста, просто откройте файл functions.php и вставьте в него следующий код.

  1. function disableAutoSave ( ) <
  2. wp_deregister_script ( ‘autosave’ ) ;
  3. >
  4. add_action ( ‘wp_print_scripts’ , ‘disableAutoSave’ ) ;
Объяснение кода.

И вновь, ничего сложного: мы просто создаем функцию, которая отключается автосохранение и привязываем ее к WordPress-функции wp_print_scripts().

7. ИЗБАВЛЯЕМСЯ ОТ ПОВТОРЯЮЩЕГОСЯ КОНТЕНТА НА СТРАНИЦАХ С КОММЕНТАРИЯМИ

Проблема.

Повторяющийся контент эта довольно распространенная SEO-проблема.
Введенная в WordPress версии 2.7 система разбиения комментариев на страницы эту проблему не решает.
Для предупреждения повторяющегося контента в комментариях будем использовать атрибут rel=«canonical».

Решение.

Копируем следующий код и вставляем его в файл functions.php.

  1. function canonical_for_comments ( ) <
  2. global $cpage , $post ;
  3. if ( $cpage > 1 ) :
  4. echo » \n » ;
  5. echo «
  6. ;
  7. echo get_permalink ( $post -> ID ) ;
  8. echo «‘ /> \n » ;
  9. endif ;
  10. >
  11. add_action ( ‘wp_head’ , ‘canonical_for_comments’ ) ;
Объяснение кода.

Сначала, мы создаем функцию, которая добавляет к каждой странице с комментариями, кроме первой, тэг link с атрибутом rel=«canonical». Затем, присоединяем эту функцию к WordPress-функци wp_head().

8. ПОЛУЧЕНИЕ ПОСТА ИЛИ СТРАНИЦЫ В КАЧЕСТВЕ PHP-ПЕРЕМЕННОЙ

Проблема.

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

Решение.

И снова ничего сложного. Делаем все то же самое: вставляем следующий код в файл functions.php.

  1. function callback ( $buffer ) <
  2. // modify buffer here, and then return the updated code
  3. return $buffer ;
  4. >
  5. function buffer_start ( ) <
  6. ob_start ( «callback» ) ;
  7. >
  8. function buffer_end ( ) <
  9. ob_end_flush ( ) ;
  10. >
  11. add_action ( ‘wp_head’ , ‘buffer_start’ ) ;
  12. add_action ( ‘wp_footer’ , ‘buffer_end’ ) ;
Объяснение кода.

Для того, чтобы этот хак работал, необходимы три функции:

  • callback(): эта функция возвращает страницу целиком как переменную $buffer. Вы можете модифицировать ее как угодно, например, при помощи регулярных выражений;
  • buffer_start(): эта функция начинает буферизацию. Ее мы присоединяем к функции wp_head();
  • buffer_end(): эта функция очищает буфер. Ее мы присоединяем к функции wp_footer().

9. ИСПОЛЬЗУЕМ ХУКИ И CRON ДЛЯ СОБЫТИЙ ПО РАСПИСАНИЮ

Проблема.

Вы, наверное, уже знаете, что WordPress может использовать события по расписанию. К примеру, можно публиковать посты в конкретное, установленное заранее, время. Используя хуки и wp-cron, мы можем запросто задать расписание для нашего собственного события. В следующем примере мы заставим блог отправлять нам сообщения на e-mail один раз каждый час.

Решение.

Вставляем следующий код в файл functions.php.

  1. if ( ! wp_next_scheduled ( ‘my_task_hook’ ) ) <
  2. wp_schedule_event ( time ( ) , ‘hourly’ , ‘my_task_hook’ ) ;
  3. >
  4. add_action ( ‘my_task_hook’ , ‘my_task_function’ ) ;
  5. function my_task_function ( ) <
  6. wp_mail ( ‘[email protected]’ , ‘Automatic email’ , ‘Hello, this is an automatically scheduled email from WordPress.’ ) ;
  7. >
Объяснение кода.

Первое, что мы сделаем, конечно, — это создадим функцию, которая будет выполнять требуемое действие. В этом примере эта функция называется my_task_function() и она просто отправляет письмо на указанный e-mail адрес.
Для того, чтобы запланировать выполнение этой функции, мы будем использовать функцию wp_schedule_event(). Последним аргументом, передаваемым ей, будет наш хук, поэтому мы «цепляем» нашу функцию my_task_function() к my_task_hook.

10. СПИСОК ВСЕХ «ХУКНУТЫХ» ФУНКЦИЙ

Проблема.

Когда что-то идет не так, здорово может пригодиться список всех «хукнутых» функций.

Решение.

Как и все предыдущие фрагменты кода следующий также необходимо вставить в файл functions.php. Только не забудьте удалить его после использования. Если Вы этого не сделаете, то сообщения будут появляться и после отладки.

  1. function list_hooked_functions ( $tag = false ) <
  2. global $wp_filter ;
  3. if ( $tag ) <
  4. $hook [ $tag ] = $wp_filter [ $tag ] ;
  5. if ( ! is_array ( $hook [ $tag ] ) ) <
  6. trigger_error ( «Nothing found for ‘ $tag ‘ hook» , E_USER_WARNING ) ;
  7. return ;
  8. >
  9. >
  10. else <
  11. $hook = $wp_filter ;
  12. ksort ( $hook ) ;
  13. >
  14. echo » ;
  15. return ;
  16. >

После того, как Вы вставите этот код в файл functions.php, вызовите функцию list_hooked_functions(). Она и покажет Вам список всех «хукнутых» функций.

Объяснение кода.

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

WP_Query by a category > Ask Question

I need to query all posts that belong to a given category (default, not custom) and a custom post type. As simple as that. The fact that it doesn’t work, to me, is ridiculous. Unless I’m missing something?

Here’s what I’ve tried:

also, some combinations of adding/renaming/removing the $args keys.

Getting all posts by a post type and then looping through them and filtering by a category is not an effective option, I believe.

Категории Хуков — WP_Query — WordPress

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

Почему WordPress лучше чем Joomla ?

Этот урок скорее всего будет психологическим, т.к. многие люди работают с WordPress и одновременно с Joomla, но не могут решится каким CMS пользоваться.

Про шаблоны WordPress

После установки и настройки движка нам нужно поработать с дизайном нашего сайта. Это довольно долгая тема, но мы постараемся рассказать всё кратко и ясно.

Самые первые настройки после установки движка WordPress

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

10 стратегий эффективного продвижения статей в блогах на WordPress

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

Топ WordPress альтернатив для создания персонального сайта

Нужен персональный сайт, но вы не хотите задействовать WordPress? Тогда данная подборка для вас.

В поисках профессионального рабочего окружения для WordPress

За время работы проекта мы не раз рассказывали о настройках рабочего окружения для движка WordPress. WAMP для Windows, MAMP для Mac или XAMPP для обеих операционных систем. Сегодня мы бы хотели поговорить о минусах перечисленных инструментов, а также пролить свет на новые решения.

Работа с WordPress CLI

Данное руководство будет полезно как администраторам, так и обычным пользователям. В WordPress появился консольный инструмент, который поможет сэкономить кучу времени!

the_title ( ) ?>

То же цикл, используя WP_Query:

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

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

the_title ( ) ?>

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

Построение запросов

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

Создание экземпляра класса и запросов для сообщений

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

Создание цикла

Вы можете использовать любые обычные функции, только не забудьте использовать их в качестве методов объекта:

Вместо have_posts(), используйте $category_posts->have_posts().
Вместо the_post(), используйте $category_posts->the_post().

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

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

Идем дальше.

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

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

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

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

Короткий и совершенно понятный код — просто и красиво.

Значения по умолчанию

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

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

posts_per_page
По умолчанию используется значение, указанное в параметрах сайта о количестве сообщений на странице.

post_type
По умолчанию используется post.

post_status
По умолчанию используется publish.

Вы можете найти полный список параметров в документации!

Массивы

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

Вы можете использовать массив для post_status, чтобы получить сообщения с различными статусами. Обратите внимание, что вы можете использовать строку any, чтобы получить сообщения со всевозможными статусами.

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

Для таксономии параметры типа category__in, tag__in и так далее, вы можете использовать массив для указания множества значений.

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

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

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

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

Узнать больше о использовании параметров таксономии можно в соответствующем разделе документации.

Работаем с метаданными

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

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

Чтобы узнать больше о параметрах, которые можно использовать, просто зайдите в раздел Custom Field Parameters в документации по WP_Query.

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

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

$query
Показывает строку запроса, которая передается в объект $wp_query. Это очень полезно для устранения неполадок в некоторых случаях.

$query_vars
Показывает ассоциативный массив аргументов, которые вы передали. Если вы делаете много смешиваний и сопоставлений перед передачей аргументов, этот инструмент может быть полезным, чтобы проверить, что все передано правильно.

$post
Содержит запрошенные записи из базы данных.

$found_posts
Удобная вещь, которая показывает общее число найденных элементов (без ограничения установленного аргументом posts_per_page).

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

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

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

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

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

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