Аргументы WP_Query рубрики и теги


Оглавление (нажмите, чтобы открыть):

Как вывести записи (посты) по произвольному полю в WordPress

Выводим записи (посты, статьи) в категориях (рубриках, разделах) и тегах по произвольному полю. Используем функцию WP_Query в шаблоне своего сайта на WordPress.

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

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

Эти php коды для вывода записей через WP_Query, для удобства, даются без конструкций if (have_posts()). Но без неё работать не будут. Правильная конструкция if (have_posts()) для этих кодов приведена ближе к окончанию статьи.

1. WP_Query PHP код для вывода записей в КАТЕГОРИЯХ

Самый простой вывод постов, исключающий записи из конкретных категорий. Использую его для вывода на главной странице через index.php или home.php.

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

Иногда в код, который выводит все статьи, но исключает определенные рубрики, требуется добавить пагинацию (&paged=’.$paged;), чтобы в последний страницах навигации не было пустых страниц.

В коде ниже выводятся записи с сортировкой по произвольному полю с ДАТОЙ. Выводятся записи с произвольным полем год, затем сортируются от последнего года к предыдущему.

$the_key,
// Сортируем по значению цифры в произвольном поле
‘orderby’ => ‘meta_value_num’,
// Сортируем от большего к меньшему
‘order’ => ‘DESC’,
// Исключаем категории
‘cat’ => ‘-310’
);

global $wp_query;
query_posts(
array_merge(
$wp_query->query,
$args
)
);
?>

2. WP_Query PHP код для вывода постов в КАТЕГОРИИ с БЮДЖЕТОМ

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

Допустим требуется вывести в категории «Бюджет» все записи, которые будут сортироваться от большей цифры к меньшей.

3. WP_Query PHP код для вывода постов в разделе РЕЙТИНГ

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

4. WP_Query PHP код для вывода постов в КАТЕГОРИИ с ДАТОЙ

В php коде ниже вводятся две переменные с ДАТАМИ. Текущая дата сравнивается с датой, которая будет в будущем.

Для чего это нужно? Например, я хочу вывести ТОВАРЫ, которые только поступят в продажу или ФИЛЬМЫ, которые только выйдут в ближайшем будущем. Если, например, такие ТОВАРЫ или ФИЛЬМЫ или ЧТО-ТО другое существует, то следует вывести ЗАПИСИ с этими произвольными полям. В противном случае в категории ничего не будет выводиться.

5. WP_Query PHP код для вывода записей в разделе ТЕГОВ

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

К счастью, работает другая структура:

И код вывода $wp_query для тегов будет такой:

6. WP_Query PHP код для вывода записей в разделе ПОИСКА

Для вывода WP_Query на странице поиска используем совершенно иной код:

Для специальной обработки запроса WP_Query в файле search.php добавляем в файл functions.php своей темы следующий код:

Он сортирует записи в категории ПОИСК по произвольному полю ГОДЫ.

В заключение. Очень важно.

После любого из перечисленных выше кодов (кроме того что в functions.php) нужно вывести следующую функцию:

Обязательная нужна такая конструкция:

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

7. Код для главной страницы (раздела) для вывода и РАЗДЕЛЕНИЯ записей по ТЕГАМ

Следующая конструкция выводит записи из категории 27. Сортирует их случайно. Выводит 4 записи.

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

8. PHP для вывода и РАЗДЕЛЕНИЯ записей по РАЗДЕЛАМ

Тот же самый код, но для вывода записей из РАЗДЕЛОВ, а не ТЕГОВ. Значения вывода ($args) изменены на другие. В том числе учтена пагинация (&paged=’.$paged;), в конструкции выше она исключена из работы.

9. Выводим один конкретный пост

Типовые конструкции для вывода одного определенного поста. В данном случае будет выведен пост с номером 1. Под конец wp_reset_postdata сбрасывает вывод WP_Query, так что можно выводить и любые другие посты.

$the_query = new WP_Query(‘p=1’);

while ($the_query->have_posts() ) : $the_query->the_post();

10. Вывод записей с незаполненным произвольным полем

Можно вывести записи с пустым значением в конкретном произвольном поле. Иногда такой способ помогает найти все записи с незаполненными значениями. Как альтернатива поиска данных через MySQL.

array(
array(
‘key’ => $the_key,
‘compare’ => ‘not exists’,
‘value’ => null,
),
)
);

global $wp_query;
query_posts(
array_merge(
$wp_query->query,
$args
)
);

if ( have_posts() ) : while ( have_posts() ) : the_post();

get_template_part( ‘/ploshadka.net’ );
endwhile;
endif;
wp_reset_query();
?>

11. Выводим одну конкретную страницу

В заключение как можно вывести вместо записи содержимое страницы. Выводим страницу с >

‘.apply_filters(‘post_title’, $t).’

English Query (запросы по теме на английском языке)

How To Use WP_Query In WordPress

Order Results WP_Query by Meta Value

Order by ASC, DESC in custom WP_Query

Sorting Query Results with Multiple Meta Keys

How to sort the result of wp_query

Также читайте

Привет. Ты находишься на моём сайте. Я разработчик. Здесь я делюсь своими наработками и знаниями. Спрашивай в комментариях, если тебе что-то не понятно или пиши, если есть что добавить.

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

Комментарии к статье “ Как вывести записи (посты) по произвольному полю в WordPress ”

Очень классно! Полезная информация для всех! Наглядно и доступно! Спасибо автору!

Аргументы WP_Query: рубрики и теги

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

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

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

Про шаблоны WordPress

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

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

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

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

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

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

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

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

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

Работа с WordPress CLI

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

$ wp_query и WP_QUERY — одинаковые аргументы, разные результаты

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

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

С другой стороны, в моей теме я установил ajax-нумерацию следующим образом:

и часть сценария:

Если я передаю массив query_vars, полученный из $ wp_query с измененным значением paged, обратно в WP_QUERY, он возвращает неправильный набор сообщений. Похоже, что WP_QUERY не учитывает cpts в цикле. Хотя эти cpts упоминаются в ‘post_type’ массива query_vars и, таким образом, передаются новому WP_QUERY.

Мастер Йода рекомендует:  В чем разница между CPU и GPU

Когда я вручную устанавливаю ‘post_type’ и передаю только этот аргумент, он работает как положено. Меня поражает аспект, заключающийся в том, что результирующие переменные query_vars, используемые в вызове ajax для WP_QUERY, абсолютно одинаковы, но только когда я вручную устанавливаю ‘post_type’, разбиение на страницы работает так, как должно.

Я не знаю, было ли это несколько понятным объяснением, но я благодарен за каждую идею, которая могла бы помочь мне. Большой THX!

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 на хостинге, которая, вероятно, является ограниченным ресурсом у вас.

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

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

Функция WordPress query_posts() и get_posts()

Решил сделать описание для одной из самых использованных функций wordpress — query_posts() так как параметров насколько много, что порой сам забываешь их. Хотя работаешь с выборкой query_posts каждый день ��

Для начала нужно внести ясность, функция query_posts изменяет основной цикл wordpress и это не очень хорошо для создания новых веток WP, но для случаем когда мы действительно решились изменить основной цикл ВП это самое оно, хотя нагрузка на ваш сайт увеличится, ведь будет создан новый WP_Query. Также, функция WordPress query_posts принимает такие же параметры как, альтернативные функции для построения циклов get_posts() и WP_Query.

query_posts входящие параметры

На вход эта функция может принимать параметры записанные в двух вариантах: как массив query_posts( array(«author»=>2, «post_type»=>»post») ) или как строка query_posts(«author=2&post_type=post»).

Параметры query_posts для рубрик / категорий к меню

Параметр query_posts Тип данных Описание параметра
cat целое число ID категории, посты которой нужно выбрать
category_name строка имя категории, посты которой нужно выбрать
category__in массив чисел несколько ID категорий, посты которых нужно выбрать
category__not_in массив чисел несколько ID категорий, посты которых нужно исключить из выборки
category__and массив чисел несколько ID категорий, посты которых нужно выбрать, чтобы они одновременно входили во всех их

Исключить посты определенной категории можно вот так:

Параметры query_posts для типов постов

к менюДля типов постов есть только один входящий параметр:

post_type (строка или массив) — какой тип записей нужно показывать: page, post, attachment, пользовательский тип.

если все посты одного типа

или вот так если нужно получить посты нескольких типов

Параметры query_posts для произвольных полей

к меню

Параметр query_posts Тип данных Описание параметра
meta_key строка название произвольного поля
meta_value строка значение произвольного поля
meta_value_num число значение произвольного поля в числовом формате
meta_compare оператор SQL оператор для проверки значения (=, !=, >, >=, , >=, array(
«relation»=>»OR»,
array(«key»=>»my_param», «value»=>»4», «type»=>»NUMERIC», «compare»=>»=»),
array(«key»=>»my_param2», «value»=>»salon», «compare»=>»LIKE»)
))); ?>

Параметры query_posts и get_posts для страниц и постов (записей) к меню

Параметр query_posts Тип данных Описание параметра
p число ID поста, который нужно получить
name строка название поста, который нужно получить
page_id число ID страницы, которую мы хотим получить
pagename строка название страницы
post_parent строка ID родительской страницы, дочерей которой нужно получить
post_parent__in массив ID родительских страниц. Получим всех дочерей для всего массива родителей
post_parent__not_in массив ID родительских страниц. Получим все страницы, родители которых не указанные в массиве
post__in массив ID постов, которые нужно получить
post__not_in массив ID постов, которые нужно исключить из выборки

Примеры использования значений:

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

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

Параметры для сортировки и порядка к меню

Параметр query_posts Тип данных Описание параметра
orderby строка Поле по которому мы будем сортировать посты. Принимает такие значения:
ID — по идентификаторам в базе
author — по ИД автора
title — по заголовку записи / страницы
name — названию поста / страницы slug (по тей части что мы видим в URL)
date — по дате публикации
modified — по дате изменения
type — по типу поста
parent — по родительском ИД
rand — случайный порядок (random)
comment_count — по количеству комментариев
meta_value — по строчному значению пользовательских полей. Должен быть указан meta_key
meta_value_num — по числовому значению пользовательского поля
post__in — по порядку указаном в массиве post__in
order строка направление сортировки по параметру orderby. Снизу в верх или сверху вниз: DESC и ASC

Если нужно изменить текущую сортировку локально, можно использовать вот такие значения:

Сортировка товаров от самого дешевого к самому дорогому:

Параметры для поиска

s (строка) — текст для поиска подходящих постов / страниц к меню

Параметры для кешированния к меню

Параметр query_posts Тип данных Описание параметра
cache_results логический кешировать или нет информацию: true или false
update_post_meta_cache логический кешировать или нет информацию мета данных: true или false
update_post_term_cache логический кешировать или нет информацию о привязке поста к терминам и таксономиям: true или false

Параметры query_posts и get_posts для пагинации к меню

Параметр Тип данных Описание параметра
nopaging логический выключить пагинацию. Выведет все посты на странице
posts_per_page число количество постов на странице.Это альтернатива параметру showposts, который до сих пор работает. Если установить -1 то будут показанные все посты
offset число количество постов сверху, которое нужно пропустить
paged число номер страницы пагинации
ignore_sticky_posts логический Игнорировать или нет прилепленные посты

Параметры статусов к меню

статус поста:
publish — опубликованный пост
pending — на модерации
draft — черновик
auto-draft — черновик wordpress. автоматическое сохранение
future — запланированный пост
private — приватный пост
inherit — ревизия
trash — удаленный пост в корзину
any — все посты

по умолчанию: publish

Параметры таксономий

tax_query (массив) — масив параметров выборки: к меню

Как вывести статьи по рубрикам на отдельной странице (главной)

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

  • Создаем шаблон страницы
  • Вывод рубрик
  • Вывод записей
  • Красивости

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

Для тех, кто не любит смотреть видео кратко расшифрую алгоритм.

Создаем шаблон страницы

Используя менеджер файлов на хостинге или ftp-клиент, создайте в папке с темой файл с нужным вам именем, например main-page.php (если используется дочерняя тема, то файл надо создавать в папке дочерней темы).

Далее. В любой теме есть файл page.php . Открываете его и копируете содержимое файла page.php во вновь созданный файл main-page.php. Получилось? Отлично! Теперь осталось только указать, что main-page.php не просто файл и именно шаблон. Для чего достаточно вверху файла добавить следующее

Сохраняем. Теперь идем в админку сайта и создаем там новую страницу. Не забудьте:

  • На странице должно быть указано название
  • Короткий и понятный урл на транслите
  • И в атрибутах страницы надо добавить к ней наш шаблон

На этом создание шаблона страницы можно считать законченным.

Вывод рубрик

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

Отлично! Теперь выведем названия рубрик, для чего будем использовать перебор циклом и получим примерно такое

У вас должно получиться примерно такое

Вывод записей

Чтобы вывести записи будем использовать класс WP_Query<> И сначала зададим нужные аргументы и запишем значения в нужные переменные.

Хорошо. Теперь осталось вывести сами записи с миниатюрами.

В итоге получаем полный код, который будет выводить статьи по рубрикам

Красивости

Осталось добавить немного css для того, чтобы записи выводились в ряд

Вот и все.
Если есть вопросы, пишите в комментариях

SEO Маяк

Блог Виталия Кириллова | Все о создании,
продвижении сайтов и заработке в интернете

Создание и продвижение сайтов, заработок в интернете

wp_list_categories() — как выводить рубрики WordPress

Всем привет! Сегодня на seo-mayak.com мы будем разбирать функцию wp_list_categories() , которая отвечает за вывод рубрик на WordPress.

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

Известно, что рубрики или категории, как угодно, разбивают сайт на разделы. Заголовки данных разделов выводятся в виде меню на боковой панели сайта (сайдбаре) или в шапке, а в некоторых темах рубрики можно найти даже в подвале. Как они там оказываются?

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

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

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

Функция имеет массу настроек и уверен, что каждому, даже самому зеленому вебмастеру, не лишнем будет знать, как работает данная функция. Поехали!

Функция wp_list_categories()

Для начала я хочу сказать несколько слов об иерархической цепочке функций WordPress по работе с рубриками, где wp_list_categories() занимает не самое первое место.

Функция wp_list_categories() — это, так сказать, дочерняя функция, т.е. она работает на основе другой функции, а именно get_categories(), которая в свою очередь тоже имеет своего родителя — функцию get_terms().

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

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

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

Теперь, для наглядного примера, возьмем стандартный виджет «Текст» и вставим в него функцию wp_list_categories() . Должно получится так:

Сохраняем и идем смотреть результат:

Вот так функция wp_list_categories() формирует вывод рубрик по умолчанию. Даже заголовок есть!

А теперь давайте разберемся, какие аргументы может принимать функция.

Все аргументы функции wp_list_categories()

В данном шаблоне приведены все аргументы которые может принимать функция.

Это шаблон! Не надо его никуда вставлять!

Итак, давайте пройдемся по всем аргументам и рассмотрим их на конкретных примерах. Приступим.

Значением данного аргумента может быть любой текст, который будет выведен первым пунктом в общем списке рубрик в качестве ссылки на главную страницу. Например:

По умолчанию: нет.

C помощью аргумента orderby можно сортировать вывод рубрик, в зависимости от его значений. Вот список значений:

ID — Сортировка будет осуществляться по ID родительских рубрик, начиная с 1 и по возрастанию;
name — Сортировка будет осуществляться по названию родительских рубрик, согласно алфавиту;
slug — Сортировка будет осуществляться по ярлыкам родительских рубрик, согласно алфавиту;
count — Сортировка будет осуществляться по количеству записей;
term_group — Сортировка по группе.

Давайте рассмотрим пример сортировки по количеству записей в рубриках, дополнительно используя аргумент show_count:

По умолчанию: name.

Данный аргумент отвечает за направление сортировки. Возможные значения:

ASC — сортировка в обычном порядке (от меньшего к большему);
DESC — сортировка в обратном порядке (от большего к меньшему);

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

По умолчанию: ASC.

С помощью этого аргумента можно задавать разделитель между ссылками. Действует только если значение аргумента: ‘style’ установлено ‘none’ .

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

list — Структура html для рубрик будет формироваться с использованием тегов

    и
    ;
    none — Список рубрик будет выведен в виде обычных ссылок. Если не изменено значение аргумента: ‘separator’ , то перенос строк будет осуществляться с помощью тега
    (вложенность подрубрик будет соблюдена).

По умолчанию: list.

Определяет показывать или не показывать количество записей в рубриках.

1 — Будет выводится количество записей в каждой рубрике;
0 — Количество записей выводится не будет.

Определяет включать или не включать в меню пустые рубрики.

1 — Пустые рубрики будут скрыты;
0 — Пустые рубрики будут включены в список.

Для каждой рубрики можно сделать описание (description). Если такое описание существует, то с помощью данного аргумента его можно встроить в html код.

1 — Описание (если оно есть) будет встроено в html код;
0 — Описание встраиваться не будет.

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

Добавляет к названию каждой рубрики ссылку на rss-канал. В качестве значения задается текст, который и будет отображаться.

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

По умолчанию: нет.

Указывает на тип фида.

По умолчанию: rss-2.

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

По умолчанию: нет.

Аргумент exclude позволяет исключать одну или несколько рубрик из списка по их ID, при этом действие аргумента child_of (если он указан) будет отменено.

Если исключить родительские рубрики, например с ID 10 и 14:

В этом случаи будут исключены все дочерние рубрики, относящиеся к родителям с вышеупомянутыми ID.

Чтобы этого не произошло, в значении аргумента hierarchical надо установить 0, при этом дерево рубрик будет отключено.

Если hierarchical равен 0, то для исключения всей ветки используется аргумент exclude_tree.

По умолчанию: нет.

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

Если значение аргумента hierarchical равно 0, то используется аргумент exclude, вместо exclude_tree.

По умолчанию: нет.

Аргумент include позволяет вывести в меню только указанные рубрики. ID рубрик перечисляется через запятую.

Рубрики выводятся в точно соответствии с ID , т.е. если указать ID родительских рубрик, дочерние рубрики выведены не будут.

По умолчанию: нет.

Позволяет выводить дочерние категории в виде вложенного списка (дерева).

1 — выведет древовидный список рубрик.
0 — выведет рубрики сплошным типом, при этом родительские рубрики будут исключены.

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

По умолчанию: Рубрики.


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

По умолчанию: Нет рубрик.

В данной аргументе можно установить лимит на отображение рубрик. Например:

Будет выведено 5 рубрик.

По умолчанию: нет.

Применения данного аргумента позволяет возвращать html код списка рубрик или выводить его на экран.

0 — Возвращать данные для дальнейшей обработки;
1 — Выводить список рубрик на экран.

Определяет глубину вложенности рубрик.

0 — Будут выведены все уровни рубрик без ограничений;
-1 — Будут выведены все уровни, но без дерева (сплошным типом). Отменяет аргумент hierarchical;
1 — Будут выведены рубрики только первого уровня. Все дочерние категории исключаются.
n — Произвольное числовое значение глубины вложенности рубрик для вывода на экран.

Интересный аргумент, позволяющий добавлять css класс current-cat к определенной рубрике. В обычном режиме такой класс добавляется к текущей рубрики и в основном применяется для подсветки. Также данный класс используется в php скриптах для удаления циклических ссылок.

В качестве значения указывается ID рубрики или нескольких рубрик через запятую.

По умолчанию: текущая рубрика.

Суммирует количество записей в дочерних рубриках и выводит результат в родительскую рубрику.

1 — выводит количество записей в родительскую рубрику;
0 — количество записей не выводится.

Значение 1 устанавливается автоматически при использовании show_count=1 и hierarchical=1 .

Определяет выводить или не выводить заголовок списка рубрик если нет ни одной записи.

0 — выводить заголовок;
1 — не выводить заголовок.

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

По умолчанию: category.

Аргумент принимает расширение объекта (класса), который предназначен для создание списка категорий. Передаваемый аргументу объект — это расширение для класса Walker_Category или Walker.

По умолчанию: Walker_Category.

Функция возвращает: HTML-контент, только если аргумент «echo» равен 0.

Встроенные CSS классы для тегов li и ul

Хуки функции

В работу функции можно вмешаться с помощью одноименного хука-фильтра wp_list_categories :

Живой пример использования хука можно посмотреть в статье Сквозные ссылки.

Таблица изменений

Параметр query_posts Тип данных Описание параметра
post_status строка / массив строк
Версия Дата Описание
2.1.0 22.01.2007 Внедрение
2.3.0 24.09.2007 Введен аргумент echo.
2.5.0 29.03.2008 Введен аргумент depth.
2.6.0 15.07.2008 Введен аргумент current_category.
2.7.1 10.02.2009 Введен аргумент exclude_tree.
2.9.0 19.12.2009 Введен аргумент pad_counts.
3.0.0 17.06.2010 Введен аргумент taxonomy.
3.4.0 13.06.2012 Удален аргумент show_last_update.
4.4.0 08.12.2015 Введены аргументы hide_title_if_empty и separator. Изменен аргумент current_category (теперь он стал необязательным).

Файл: wp-includes/category-template.php (Развернуть)

С уважением, Виталий Кириллов

Отдельная страница для тэгов WordPress сайта: лист меток

Вступление

Недавно я понял, что не уделял тэгам (меткам) WordPress должного внимания. Вчера посмотрел в консоли страницу «Метки» и увидел, что их более 500 и это после удаления не прикрепленных меток. Пора делать для них отдельную страницу. Как всегда даю практическое решение. Для сохранения изменений в шаблоне используем дочернюю тему.

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

Страница для тэгов WordPress

В создании страницы идем практическим путем. Для шаблона страницы берем файл вашего шаблона, выводящий страницы (page) сайта. Копируем его и переносим для редактирования в текстовой редактор типа Notepad++.

-Ищем в файле функцию, которая выводит контент. Скорее всего это будет функция:

-Вместо неё вписываем стандартную функцию WP для вывода облака меток:

-Например, укажем такой аргумент:

, где 2000 это количество меток.

-Сохраняем файл под именем [tag.php]. Если такой файл уже есть, даем ему другое имя;

-Заливаем этот файл в каталог рабочего шаблона.

-В шаблоне появится название нового файла, что мы и видим на странице «Редактор» в консоли сайта.

Второй способ создать страницу меток

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

  • В текстовом редакторе создаем такой файл:

В начале файла задаем его название: The template name: Tag. Получаем в консоли название «Шаблон метки». Если ничего не писать, получим просто файл: tag.php .

  • Сохраняем под именем [tag.php]
  • Заливаем созданный файл в каталог шаблона.

Примечание

В файле, который я привел для примера функция [wp_tag_cloud] указана с атрибутами:

  • smallest=12&largest=36 (минимальный и максимальный разметы шрифтов меток);
  • number=1500 (количество выводимых меток);
  • format=flat (включает, параметр separator;)
  • separator=| (разделитель)
  • orderby=name (сортировка по имени, можно не указывать).

Создаем страницу с облаком всех меток сайта

Страница для тэгов WordPress создана. После создания файла страницы для вывода облака меток, остается эту страницу создать.

Как добавить категории и теги страницам в WordPress с помощью плагинов и хаков

Как вы знаете, в системе Вордпресс существует 2 основные сущности: заметки (посты) и страницы сайта. Первая, как правило, используется при создании записей блога, вторая — для отображения статичной информации (контакты, об авторе и др.). Учитывая эти особенности, меню админки WP реализовано таким образом, что функции категорий и тегов в страницах WordPress полностью отсутствуют. Сегодня разберемся как исправить текущую ситуацию — есть парочка модулей по теме либо можно все реализовать через сниппеты.

Если подумать, то решение разработчиков CMS вполне логичное — данная фишка естественным образом смотрится только в записях блогов, а в остальных случаях, вроде как, и не требуется. Однако по работе возникают разные ситуации, в том числе и необходимость указывать теги и категории для страниц WordPress. Они могут пригодиться:

  • при создания каталога статей (разбиения по рубрикам);
  • как еще один способ навигации;
  • чтобы скрыть статьи из выбранной категории;
  • при реализации похожих страниц (выступают в качестве критериев схожести нескольких объектов);
  • для краткой «характеристики» определенного контента (за счет меток).

Плагины для задания категорий и тегов страницам

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

В большинстве случаев код вставляется в page.php (или другой подходящий файл).

Post Tags and Categories for Pages

С этим модулем я знаком уже давно. Он обновлялся 10 месяцев назад и пропустил несколько последних знаковых релизов, тем не менее, при тестировании все было отлично. Не удивительно, что Post Tags and Categories for Pages имеет более 30тысяч скачиваний и почти максимальную оценку.

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

На скриншоте видите, что расширение совместимо и с некоторыми другими, например, с Simple Tags. Также я успешно тестировал вывод тегов страниц в WordPress через the_tags в шаблоне и аналогичную фишку для категорий — the_category.

Единственный возможный минус — в своих «личных записях» нашел пометку о том, что данное решение глючит с исключениями (не могу вспомнить, что это значит): то ли речь идет о параметре exclude в WP функциях, то ли о плагинах похожих постов и Exclude categories … Как выход из ситуации, предлагается добавить метки, а после отключить модуль. Вдруг, информация кому-то пригодится.

Tag Pages

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

  • появление специального блока ввода меток в WP при редактировании;
  • с помощью фильтра pre_get_posts все ваши публикации будут корректно выводиться в архивах, RSS фидах;
  • совместим с мультисайтовой установкой;
  • не делает никакие правки в БД, только использует хуки.

Add Category to Pages

У модуля меньше всего загрузок — 10тысяч, но при этом максимальная оценка. Не смотря на название, он позволяет работать не только с категориями страниц WordPress но и тегами. Вы сможете просматривать архивы со списками публикаций по определенной теме. Единственное, что смущает — последний апдейт был 3 года назад. Хотя, по сути, применяемые здесь WP функции, за это время не изменились.

Хаки добавления тегов / категорий в страницы

В сети имеется несколько нужных нам сниппетов, в которых суть плюс-минус одинаковая, поэтому я выберу лишь один найден здесь (самый детальный). Хак следует разместить в файле function.php вручную либо используйте плагин Code Snippets. Весь код состоит из двух частей.

Сначала реализуем отображение блоков меток и категорий для страниц WordPress внутри админки:

Если вам надо активировать какую-то одну сущность — удалите лишнюю строчку, оставив только вариант с post_tag или category.

Вторая часть сниппета:

if ( ! is_admin() ) < add_action( 'pre_get_posts', 'tag_cat_archives' ); >function tag_cat_archives( $wp_query ) < $my_taxonomies_array = array('post','page'); if ( $wp_query->get( ‘category_name’ ) || $wp_query->get( ‘cat’ ) ) $wp_query->set( ‘post_type’, $my_taxonomies_array ); if ( $wp_query->get( ‘tag’ ) ) $wp_query->set( ‘post_type’, $my_taxonomies_array ); >

Данный код нужен дабы система WordPress смогла выводить архивные списки рубрик/меток. Вы модифицируете запрос Wp_Query + используете хук pre_get_posts. При этом действия происходят только во фронтенде, т.к. мы указали условие !is_admin().

Еще в одном случае мне встречалась конструкция, где вместо задания сущностей ‘post‘,’page‘ для Wp_Query был параметр ‘any‘ (любые):

if ($wp_query->get(‘tag’)) $wp_query->set(‘post_type’, ‘any’);

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

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

Извращения с темами WordPress для новичков и не только (Часть 2) — query_posts

Спасибо тов. curlybrace за то, что открыл глаза на существующие правила и нормативы в постинге на Хабре. Будем вникать, а пока что вторая часть статьи о WordPress и темах.

Query Posts

Список последних записей

Как видно из кода мы передали в функцию query_posts параметр showposts равный 5. Даже не будучи особым знатоком английского языка, понятно что будут показаны 5 постов. Сортируются они по умолчанию по дате публикации — от последних к первым. the_permalink() — даёт нам ссылку на пост, а the_title() — заголовок.

N-постов из определенной рубрики

Всё проще простого — всего 6 знаков, а какой эффект, какой размах:-) Думаю тут пояснения не требуются, поэтому перейдём к

Исключаем записи из вывода

Расширяем кругозор или список доступных параметров

Думаю вы оценили прелесть этой небольшой, но мощной функции query_posts, и хотя вы всегда можете более глубоко изучить её в кодексе, я позволю себе перечислить параметры, которые могут вам пригодиться:
cat и category_name — выбор рубрики по ID или по имени, как исключить какую-то рубрику — см. выше.
Хинт: если нужно передать несколько рубрик, то не нужно несколько раз писать cat=1&cat=2, достаточно перечислить рубрики через запятую cat=1,2. Кстати говоря, этот приём относится к любому параметру, который может принимать несколько значений.
author и author_name — посты определенного автора, по > p и name — выбирает посты по > page_id и pagename — тоже самое, только применительно к страницам.
showposts — сколько из отфильтрованных постов/страниц показать при выдаче.
ВременнЫе (hour, minute, second, day, monthnum, year) — посты за указанный период.
paged — параметр позволяет показывать те посты, который в обычном случае доступны при переходе по ссылкам «Предыдущая страница», т.е. paged=2 покажет посты, как если бы мы отмотали на 2 страницы в прошлое (при выводе по 10 постов на странице, мы получили бы в выдаче записи с 21 по 30).
posts_per_page — сколько постов на страницу. Хорошо группируется с предыдущим параметром.
order — порядок сортировки по дате, принимает значения ASK — от старых к новым или DESC — от новых к старым (стоит по умолчанию).
offset — т.н. отступ. Пропускает (сдвигает) на определенное количество записей.

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