Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. WordPress
Code

Показываем похожие записи с помощью таксономии и пользовательского типа содержимого в WordPress

by
Difficulty:IntermediateLength:MediumLanguages:

Russian (Pусский) translation by Ellen Nelson (you can also view the original English article)

Final product image
What You'll Be Creating

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

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

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

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

Что вам понадобится

Чтобы следовать вместе со мной, вам понадобится:

  • Установленный WordPress для разработок, не следует делать это на рабочем сайте, пока это не будет работать.
  • Редактор кода.
  • Тема, которую вы можете редактировать или тема с хуком действий (action) внизу содержимого. Если вы используете стороннюю тему без хуков, вам понадобиться создать дочернюю тему и редактировать её.

Настройка плагина

Начнём с создания нового плагина и добавления к нему «шапки» с информацией:

Если вам это не знакомо, посмотрите наш курс по созданию плагина. И не стесняйтесь изменять текст в «шапке» выше, подставьте ваше имя, URI и прочее.

Регистрация типа содержимого

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

Мы сделаем это создав функцию и подцепив её к хуку init. Добавьте это в ваш плагин:

Это регистрирует плагин tutsplus_product. Если хотите иное название для типа содержимого, тогда измените его в коде выше.

Теперь, когда вы посетите админку WordPress, вы увидите в меню ваш тип содержимого:

The Product post type in the WordPress admin menu

Регистрация таксономии

Следующий шаг – регистрация таксономии. Снова создаём функцию в нашем плагине:

Моя таксономия называется tutsplus_product_tax. Я специально добавила tax, чтобы знать, что это таксономия, а не тип содержимого. А ещё я сделала специальный пункт меню так, чтобы кто бы ни использовал этот плагин через админку WordPress, они будет знать когда они работают с типом содержимого, а когда с таксономией.

Вот оно в админке WordPress:

The list of products with taxonomy terms assigned in the WordPress admin

На снимке вы можете увидеть, что я добавила несколько примеров продуктов.

Создание запроса

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

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

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

Получение списка терминов или добавление их в массив

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

Добавьте это:

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

Это извлекает фрагмент каждого термина и добавляет его в массив $producttermnames.

Выполняем запрос

Теперь, нам надо задать аргументы запроса. Это будет внутри условия if( $productterms ), так как мы не хотим, чтобы он выполнялся при отсутствии терминов таксономии. Добавьте это в ваш код:

Тут, мы использовали массив $producttermnames с аргументами tax_query. Это выберет любые записи с любыми терминами, которые есть в этом продукте.

Теперь запустим запрос с этими аргументами:

Это выведет элемент h2 с заголовком и список со ссылками на каждый пост. Если пожелаете, можете вывести это по-другому; можете добавить отрывок или изображение.

Как избежать ошибок

Обычно, вы не думаете, что пользователь добавит больше одного термина таксономии к каждому продукту, потому что каждый термин связан с продуктом. Но нельзя сказать наверняка, что такого никогда не случится. Вот почему мы добавили массив $producttermslist в функцию и используем его для одного экземпляра WP_Query, вместо запуска WP_Query в цикле foreach. Также это делает страницу более эффективной, так как выполняется только один дополнительный запрос.

Вся функция

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

Запускаем функцию

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

  1. Подцепить её к существующему хуку действий в вашей теме.
  2. Добавить хук действий в вашу тему, используя do_action() и подцепив её туда.
  3. Добавить название функции в вашу тему туда, где вы хотите вывести этот список.

Для второго и третьего варианта, если вы работаете со сторонней темой, вам придётся создать дочернюю тему и редактировать её. Ещё вы можете создать файл шаблона single-tutsplus_product.php и добавить хук или функцию в него, или просто добавить это в single.php. Если вы подцепили её через файл шаблона для типа содержимого, то вы можете удалить проверку if ( is_singular( 'tutsplus_product' ) ).

Я использую тему Suki из каталога плагинов WordPress. У неё в файле single.php есть данный хук:

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

Когда вы это сделаете, сохраните ваш плагин и добавьте несколько продуктов и терминов таксономии.

Результат

Я добавила термин widget в продукт Widget и другой термин для демонстрации:

The products in the WordPress admin

Я добавила эти два термина к нескольким записям на моем сайте, так что при просмотре страницы товара Widget, внизу, вы можете видеть список связанных записей:

The repeated posts list on a product page

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

Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.