Аргументы wp_query: таксономии

Типы страниц и названия файлов

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

Ниже указана страница сайта и соответствующий ей список PHP файлов. Такие файлы должны находится в корневой папке темы.

  • (когда используется шаблон страницы)
  • (для древовидного типа с поддержкой шаблонов. С WP 4.7)
  • (позволяет указать шаблон для отдельной картинки)
  • (тоже что и attachment.php)

Под началом и концом MIME типа, имеется виду первая и последняя часть MIME типа, разделенная . Например, MIME-тип текстового файла: и значит будет проверяться наличие файл text.php, затем plain.php, затем text-plain.php.

Полный список MIME типов смотрите в описании get_allowed_mime_types().

  • (если страница пагинации)
  • (если страница пагинации)
  • (если страница пагинации)
  • (если страница пагинации)
  • (если страница пагинации)
  • (если страница пагинации
  • (логика постоянных страниц, если для главной выбрана страница)

Страница блога появляется, когда для главной выбрана постоянная страница

Шаблоны встраивания используются когда запрашивается запись через REST API. Встраивания появились в версии 4.5 и позволяют встраивать ваши записи в чужие сайты. См. get_post_embed_url()

Чтобы изменить только контент встраивания, можно в теме создать файл и описать там HTML. Оригинальный HTML находится в файле движка /wp-includes/theme-compat/embed-content.php

Класс WP_Query

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

$query = new WP_Query(
    'posts_per_page' => 10,
    'orderby' => 'comment_count'
);

if ($query->have_posts()) {
    echo '

;
while ($query->have_posts()) {
$query->the_post();
echo » . get_the_title() . »;
}
echo »;
wp_reset_postdata();
} else {
echo ‘

Записей не найдено

‘;
}

Параметры категорий (рубрик)

Получает посты относящиеся к определенным категориям.

  • (число/строка/массив). Идентификатор категории.
  • (строка). Имя (slug) категории.
  • (массив). Записи, которые входят одновременно в несколько категорий.
  • (массив). Записи, которые входят в одну из указанных категорий.
  • (массив). Записи, которые не входят в указанные категории.
// записи из категории с идентификатором 4; записи
// из дочерних категорий также будут выбраны
$query = new WP_Query('cat' => 4);
// записи из категорий с указанными идентификаторами;
// записи из дочерних категорий также будут выбраны
$query = new WP_Query('cat' => 2,6,17,38);
// записи из категории python
$query = new WP_Query('category_name' => 'python');
// записи из категорий python и javascript
$query = new WP_Query('category_name' => 'python,javascript');
// записи из категории с идентификатором 4
$query = new WP_Query('category__in' => 4);
// записи из категорий с указанными идентификаторами
$query = new WP_Query('category__in' => 2,6);
// записи, которые входят одновременно в категории 2 и 6
$query = new WP_Query('category__and' => 2,6);

Параметры меток (тегов)

Получает посты относящиеся к определенным меткам.

  • (строка). Название (slug) метки.
  • (число). Идентификатор метки.
  • (массив). Записи одновременно из нескольких меток. Массив идентификаторов.
  • (массив). Записи хотя бы с одной указанной меткой. Массив идентификаторов.
  • (массив). Записи, не относящиеся к указанным меткам. Массив идентификаторов.
  • (массив). Аналогично , только указываются названия (slug) меток.
  • (массив). Аналогично , только указываются названия (slug) меток.
// записи с меткой flowers
$query = new WP_Query('tag' => 'flowers');
// записи, имеющие обе указанные метки
$query = new WP_Query('tag__and' => 37,47);
// записи, имеющие хотя бы одну из указанных меток
$query = new WP_Query('tag__in' => 37,47));
// записи, не связанные с метками 37 или 47
$query = new WP_Query('tag__not_in' => 37,47);

Журнал изменений

4.9.1 — Mai 17th 2019

  • ‘Load more’ button / Ajax API
  • Data range filter
  • Text, if there is no post
  • Excerpt length in lines (line-clamp)
  • Image crop with CSS (object-fit)
  • Fluid images (max-width in %).
  • One thumb dimension can be left empty
  • Admin UI: Button to easy add post details placeholder
  • Admin UI: Set / find thumbnail size buttons: +, ¼, ½, 2x, -, ratio and Media sizes

4.8.2 — January 30th 2018

  • Fixed Adding the widget with the customizer only the title is shown
  • Fixed Recognize «Empty lines» > Next line is a paragraph in the Template in widget areas

4.8 — January 22th 2018

  • SVG font-icon support for post formats
  • Template to arrange the post details
  • Premade Templates
  • Date format: Time since plublished
  • Filter by post status: Published, scheduled, private
  • Hover effect: SVG font-icon

4.7.2 — February 25th 2017

  • Add option to disable only the font styles
  • Fixed if option ‘Everything is a link’ no closing anchor tag
  • Fixed if option ‘Everyting is a link’ wrong layout
  • Fixed when a manual excerpt is provided, use it instead of generating an automatic one
  • Fixed if option ‘Disable the built-in CSS’ the thumbnail client-side cropping isn’t disabled
  • Fixed if option ‘Disable the built-in CSS’ title class is not rendered
  • Fixed when having multi shortcodes, clicking on a checkbox label marks in any of them selects the one in the «first»
  • Fixed if option ‘CSS crop to requested size’ for multi shortcodes
  • Fixed for CSS animation

4.7.1 — December 20th 2016

  • Support multiple shortcodes in content
  • Add option for post offset (use two or more widgets after another)
  • Fluid images for Responsive Layouts
  • Set a thumbnail as default thumbnail
  • Add option to enable excerpt filters from Themes and plugins
  • Add option to disable social buttons, banner, … in the excerpt
  • Add dropdownbox entry for ‘all’ categories
  • Add option to disable subcategories
  • Add insert shortcode buttons to the editor toolbar
  • Use WP user profile for settings (‘auto close’ and if the shortcode button appears in the editor toolbar)
  • Simple API for external use
  • Support localization with translate.wordpress.org: Portuguese (Brazil) thank you Henrique Vianna and German by Daniel Floeter
  • Remove allow_html option (Instead we recommend to use the or we support this option furthermore in the Term Posts Excerpt Extension for the premium version)

4.6.2 — August 28th 2016

  • Fixed only five widget instances can be costumized with shortcodes.
  • For editing shortcode adds a customizer link to the admin-bar if page/post is in edit mode.

4.6.1 — June 5th 2016

  • Add shortcode edit options only in the customizer
  • Keep panels open after save.
  • Option to hide social buttons on output.

4.1.8 — May 3th 2016

  • Add mouse hover effects: blur
  • Add option to choose allowed HTML in the excerpt
  • Add Jetpack ‘Sharing — Show buttons on posts’ support
  • Fixed division by zero bug (for small uploaded images)

4.1.6 — April 13th 2016

  • Add option CSS cropping for thumbnails.
  • Add option to set mouse hover effects for post thumbnail.
  • Add option to change the excerpt more text.
  • Add option to allow links in the excerpt
  • Add filter ‘widget_title’ for the title
  • Add option to hide post titles.

4.1.4

  • Added option exclude current post.
  • Added option to hide posts which have no thumbnail.
  • Added option to make the widget date link to the category page.
  • Added option to link to the category page below posts list.
  • Added option show post author.
  • Added option to format the outputted date string.

4.1.0

  • Added PHP5 Constructor.
  • Added Option to allow/disallow widget CSS.
  • Now, compatible with WordPress 4.3.
  • Meet new plugin author kometschuh

3.0

  • Added support for WP 2.9’s post thumbnail feature.
  • Removed support for Simple Post Thumbnails plugin.
  • Added option to show the post date.
  • Added option to set the excerpt length.
  • Added option to show the number of comments.

Создание цикла с помощью класса WP_Query

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

Цикл, созданный при помощи WP_Query, отличается от стандартного цикла. Типичный WordPress цикл выглядит следующим образом:


<?php if ( have_posts() ) {
   while ( have_posts() ) 
   { 
      the_post(); 
      // Вывод данных. 
} 
} 
?>

А вот как выглядит цикл, созданный посредством использования WP_Query:


<?php $args = array( 
'category_name' =>'news',
   'posts_per_page' => 3
);

$my_query = new WP_Query( $args );
if ( $my_query->have_posts() ) {
   while ( $my_query->have_posts() ) {
      $my_query->the_post();
      // Вывод данных.
}
}

// Сброс заброса
wp_reset_postdata();

?>

Отличия между ними заключаются вот в чем:

  • Мы задаем ряд аргументов для экземпляра WP_Query,
  • Затем инстанцируем класс WP_Query,
  • Добавляем $my_query-> в начало функций have_posts() и the_post() (в данном случае это методы класса WP_Query),
  • И сбрасываем данные параметра $post для возврата основного запроса.

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

Функция query_posts()

Используется самим WordPress для получении записей текущей страницы (отдельная запись, рубрика, метка). Определяет, какие посты будут показаны в базовом Цикле WordPress. Создает базовый Цикл WordPress и возвращает список записей (постов).

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

Основной запрос WordPress — это запрос, который выполняется до вывода какого-либо текста на страницу. Параметры такого запроса собирает сам WordPress — записи какой рубрики показывать, сколько записей будет на странице и т.п. А вторичный запрос — это тот, который создается темой или плагином и выполняется дополнительно к основному. Например: вывод в сайдбаре списка рубрик или списка популярных записей.

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

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

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

wp post create

Создает новую запись.

Использование

wp post create                              

Можно указать Глобальные параметры и следующие:

The ID of the user who added the post. Default is the current user ID.
The date of the post. Default is the current time.
The date of the post in the GMT timezone. Default is the value of $post_date.
The post content. Default empty.
The filtered post content. Default empty.
The post title. Default empty.
The post excerpt. Default empty.
The post status. Default ‘draft’.
The post type. Default ‘post’.
Whether the post can accept comments. Accepts ‘open’ or ‘closed’. Default is the value of ‘default_comment_status’ option.
Whether the post can accept pings. Accepts ‘open’ or ‘closed’. Default is the value of ‘default_ping_status’ option.
The password to access the post. Default empty.
The post name. Default is the sanitized post title when creating a new post.
Post id of a post to be duplicated.
Space or carriage return-separated list of URLs to ping. Default empty.
Space or carriage return-separated list of URLs that have been pinged. Default empty.
The date when the post was last modified. Default is the current time.
The date when the post was last modified in the GMT timezone. Default is the current time.
Set this for the post it belongs to, if any. Default 0.
The order the post should be displayed in. Default 0.
The mime type of the post. Default empty.
Global Unique ID for referencing the post. Default empty.
Array of category names, slugs, or IDs. Defaults to value of the ‘default_category’ option.
Array of tag names, slugs, or IDs. Default empty.
Array of taxonomy terms keyed by their taxonomy name. Default empty.
Array in JSON format of post meta values keyed by their post meta key. Default empty.

Read post content from . If this value is present, the argument will be ignored.

Passing as the filename will cause post content to be read from STDIN.

Associative args for the new post. See wp_insert_post().

Immediately open system’s editor to write or edit post content.

If content is read from a file, from STDIN, or from the argument, that text will be loaded into the editor.

Output just the new post id.

Примеры

# Create post and schedule for future
$ wp post create --post_type=page --post_title='A future post' --post_status=future --post_date='2020-12-01 07:00:00'
Success: Created post 1921.
# Create post with content from given file
$ wp post create ./post-content.txt --post_category=201,345 --post_title='Post from file'
Success: Created post 1922.
# Create a post with multiple meta values.
$ wp post create --post_title='A post' --post_content='Just a small post.' --meta_input='{"key1":"value1","key2":"value2"}'
Success: Created post 1923.
# Create a duplicate post from existing posts.
$ wp post create --from-post=123 --post_title='Different Title'
Success: Created post 2350.

Пинги и уведомления

Так же как комментариями, можно управлять пингами. Вот несколько примеров такого управления:

Закрываем возможность принимать пинги

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

UPDATE wp_posts p SET p.ping_status = 'closed'
Удаляем все уведомления

Уведомления — это те же пинги — это такие «комментарии», которые оповещают вас о том, что Вася Пупкин сослался на вас. Если вы решили что такие горе-комментарии вам не нужны, их можно удалить оптом, используя такой SQL запрос:

DELETE FROM wp_comments WHERE comment_type = 'pingback';

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

Создаем шорткод для встраивания записей внутрь записей

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


>?php 
/* 
* Использование: 
* 
*  
*  
*  
*/ function tutsplus_embedded_post_shortcode( $attributes ) {
 // Получение параметров шорткода. 
extract( 
shortcode_atts( 
array( 
'type' => 'post', 
'slug' =>'', 
'full' => true 
), 
$attributes
 ) 
); 
// Установка параметров. 
$args = array( 
// Get post type ("post" by default). 
'post_type' =>; $type, 
// Get post by slug. 
'name' => $slug ); 
// Создание нового запроса. 
$my_query = new WP_Query( $args ); 
// Проверка наличия результатов запроса. 
if ( $my_query->have_posts() ) { 
// Начало генерации разметки. 
$output = ''; 
} else { 
// Вывод сообщения об отсутствии результата запроса. 
$output = ''; 
} 
wp_reset_postdata(); 
return $output; 
} 
add_shortcode( 'embed_post', 'tutsplus_embedded_post_shortcode' ); 
?>

Выводим список текущих запланированных записей

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


<?php /*
* Использование с Цитатой:
*
* <?php echo tutsplus_show_drafts(); ?>
*
* Использование без Цитаты:
*
* ;
*/
function tutsplus_show_drafts( $show_excerpts = true ) {
// Установка параметров.
$args = array(
'post_status' =>'pending',
'nopaging' => true
);
// Создание нового запроса.
$my_query = new WP_Query( $args );
// Проверка наличия результатов запроса.
if ( $my_query->have_posts() ) {
// Начать генерацию разметки.
$output = '<section class="pending-posts">;';
// Запуск прохода циклом по результатам запроса.
while ( $my_query->;have_posts() ) {
$my_query->the_post();
// Вывод заголовка поста.
$output .= '';
$output .= '

;’;
$output .= get_the_title();
$output .= ‘

;’;
//вывод цитаты, если включена
if ( $show_excerpts ) {
$output .= ‘
‘;
$output .= get_the_excerpt();
$output .= »;
}
$output .= ‘

‘;
}
// Закончить генерацию разметки.
$output .= »;
} else {
// Let user know that nothing was found.
$output = »;
}
wp_reset_postdata();
return $output;
}
?>

Выводим запись годичной давности

Если ваш блог создан более года назад, а его контент актуален во все времена (и в 2015 и в 2025 гг.), то добавление раздела «Записи в этот день год назад» позволит существенно увеличить количество просмотров ваших страниц. Сделать это можно следующим образом:


<?php // Установка параметров. 
$args = array( 
// День (1 - 31). 
'day' => date( 'j' ),

// Месяц (1 - 12).
'monthnum' => date( 'n' ),

// Год (минус 1).
'year' => date( 'Y' ) - 1,

// Показать только одну запись.
'posts_per_page' => 1

);

// Создание нового запроса.
$my_query = new WP_Query( $args );

?>

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

Выводим дочерние страницы текущей страницы

Вы считаете, что на страницах «Услуги», «Мои работы» и «Мое портфолио» кроме заголовков подстраниц разместить больше нечего? Вы правы, эти страницы обречены на роль «заполнителей». Подстраницы в этом случае – наиболее предпочтительный вариант. А если конкретнее, здесь можно было бы разместить, к примеру, сетку (grid) с миниатюрами квадратной формы и ниже их заголовками. Давайте посмотрим, какой вид запроса можно использовать для создания подобного шаблона страницы:


<?php $current_page_id = get_the_ID();
 
// Установка параметров. 
$args = array( 

// Получение дочерних страниц. 
'parent' => $current_page_id,

// Отключение пагинации.
'nopaging' => true

);

// Создание нового запроса.
$my_query = new WP_Query( $args );

?>

Настраиваем простой слайдер

При создании корпоративных сайтов, портфолио или веб-журналов, слайдеры стали своеобразным «мастхэвом», неотъемлемой составляющей подобных проектов. Я не большой фанат слайдеров (считаю, они отрицательно воздействуют на пользовательское восприятие), но в сети они весьма популярны. Если вам нужны слайдеры, используйте простой запрос, созданный с помощью класса WP_Query.


<?php // Установка параметров. 
$args = array( 
// Получение записей типа "slider". 
'post_type' =>; 'slider',
   // Получение категории для вывода слайдов.
   'category_name' => 'home-slides',
   // Отключение пагинации.
   'nopaging' => true
);

// Создание нового запроса.
$my_query = new WP_Query( $args );

?>

Аргумент ‘cat’ можно использовать для получения слайдов из различных категорий, что позволит вам поделить слайды на группы и использовать несколько слайдеров на разных страницах. Если же вы предпочитаете наличие лишь одного слайдера на своем сайте, удалите эту строку.

Фильтры, связанные с WP_Query

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

Фильтруем количество найденных записей по запросу: found_posts

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

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

К примеру, если вы объявляете произвольное значение смещения в запросе, WordPress НЕ будет учитывать сдвиг из параметра $wp_query->found_posts. Например, если у вас после смещения из 10 записей имеется еще 45, WordPress будет игнорировать сдвиг, и found_posts все равно выдаст результат из 55 записей.

Фильтруем запрос для получения найденных записей: found_posts_query

Количество найденных записей вычисляется при помощи MySQL-команды SELECT FOUND_ROWS(). Этот фильтр позволяет изменять эту команду, если вам требуется вычислить количество найденных записей каким-нибудь другим образом.

Фильтруем весь SQL-запрос: posts_request

Если вы хотите полностью изменить SQL-запрос, то этот фильтр предназначен как раз для этих целей. Он просто переписывает SQL-запрос, составленный классом WP_Query.

Фильтруем массив, который возвращает запрос: posts_results

Если вам нужно изменить PHP-массив, который WP_Query генерирует с помощью SQL-запроса, то можно воспользоваться этим фильтром. Предлагаю вам наглядный пример работы фильтра.

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

Фильтруем массив из полученных записей: the_posts

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

Фильтруем список полей запроса (в том числе поле SELECT) запроса: posts_fields

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

Фильтруем команду запроса DISTINCT: posts_distinct

Команда SQL-запроса DISTINCT указывает, что запрос должен вернуть лишь определенные результаты, а фильтр помогает реализовать это. Изначально WP_Query не возвращает какие-то определенные результаты, но при использовании фильтра с функцией, которая возвращает DISTINCT, запрос можно настроить под определенный тип результатов.

Фильтруем часть запроса WHERE: posts_where

Команда SQL-запроса WHERE используется для фильтрации MySQL-операторов SELECT, INSERT, UPDATE или DELETE, а фильтр помогает реализовать это. WP_Query выполняет всю необходимую работу по фильтрации результатов, но вы можете расширить возможности фильтрации при помощи этого фильтра.

Фильтруем часть поискового запроса WHERE: posts_search

Еще одна разновидность фильтра posts_where, которую можно использовать для изменения поля запроса WHERE при получении результатов поиска по WordPress.

Фильтруем команду запроса JOIN: posts_join

Команда SQL-запроса JOIN позволяет работать с SQL-командами внутри нескольких таблиц базы данных, а фильтр помогает реализовать это. Это один из самых продвинутых элементов MySQL, поэтому я не рекомендую вам использовать этот фильтр, пока вы не овладеете принципами работы JOIN в MySQL.

Фильтруем часть запроса GROUP BY: posts_groupby

Команда SQL-запроса GROUP BY позволяет запросу вернуть “сгруппированные” по полям результаты базы данных, а этот фильтр помогает выбрать метод группировки.

Фильтруем все команды запроса: posts_clauses

Если вы хотите работать со всеми частями запроса одновременно, то для этого существует специальный фильтр posts_clauses. Он охватывает команды WHERE, GROUP BY, JOIN, ORDER BY, DISTINCT, SELECT и LIMITS.

Вмешиваемся в запрос перед его запуском: pre_get_posts

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


<?php function tutsplus_exclude_category( $wp_query ) {

/*
* Добавляем рубрику в массив исключенных рубрик. В нашем случае, в этом массиве всего одна рубрика – наша

*/
$excluded = array( ‘-1’ );

/*
* Обратите внимание на этот более опрятный метод написания запросов:
*
* $wp_query->set( ‘category__not_in’, $excluded );
*/
set_query_var( ‘category__not_in’, $excluded );

}

add_action( ‘pre_get_posts’, ‘tutsplus_exclude_category’ );

?>

Работаем над парсингом запроса: parse_query

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

Изменяем объект Post: the_post

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

Это действие позволяет изменять объект post сразу после выполнения запроса. Используя это действие, вы можете напрямую изменять выводимые данные. Давайте рассмотрим небольшой пример:

<?php function tutsplus_featured_badge( $post ) {
 
    if ( is_single() && in_category( 'featured' ) ) {
         
        echo '' . __( 'FEATURED', 'tutsplus' ) . '

Как это работает

За всю логику: какой файл подключать, отвечает файл ядра wp-includes/template-loader.php. Если разобраться, в нем все описано. Но, это занятие не особо интересное, поэтому я его распишу.

Прежде всего. подключается после того как загрузится вся среда WordPress. После того, как отработает файл и обработается основной запрос — функция wp(). Т.е. подключается в самом-самом конце PHP скрипта…

Сначала срабатывает хук template_redirect. В этом хуке можно произвести какие-то проверки и если надо перенаправить на другой URL. В нем нужно обрывать работу скрипта через . Т.е. если этот хук что-то меняет, то на этом работа файла должна закончиться и мы «улетаем» на какую-то другую страницу.

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

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

Дальше — путь до файла темы определен! Теперь он прогоняется через фильтр template_include. Который позволяет нам изменить файл шаблона для текущего запроса.

Дальше, файл подключается в PHP и запускается визуальная часть генерации страницы.

Произвольные поля (postmeta)

Удаляем ненужные произвольные поля

Стоял плагин и создавал себе произвольные поля, как вдруг — он стал не нужен и вы его удалили, а осиротелые, никому не нужные произвольные поля остались в Базе Данных. В такой или подобной ситуации, все произвольные поля с названием, например «meta_name» можно удалить таким простым SQL запросом:

DELETE pm FROM wp_postmeta pm WHERE pm.meta_key = 'meta_name'

Если название произвольного поля (meta_name) в кириллице, то убедитесь, чтобы кодировка файла из которого будет производиться SQL запрос соответствовала кодировке блога (обычно UTF-8 без BOM).

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

Несмотря на то, что в админке создать произвольное поле не задав ему никакое значение не получится, по крайней мере стандартными средствами, такие «пустые» произвольные поля все же могут быть в вашей Базе Данных. Например, их могут оставить всякие там плагины или кривые руки. Чтобы посмотреть есть ли подобные поля и затем решить их судьбу, воспользуетесь таким SQL запросом:

SELECT *
FROM wp_postmeta pm
LEFT JOIN wp_posts wp ON wp.ID = pm.post_id
WHERE wp.ID IS NULL

Журнал изменений

4.7.0

  • Add : Possibility to duplicate news block
  • Add : Selection of material icon for the hover icon
  • Add : Hexadecimal to rgba (add transparency) color selection
  • Add : Improve setting style and texts in backend
  • Add : Automatic testing for PHP versions, features…
  • Add : Material vertical theme compatibility for Pro Addon

4.6.3

  • Add : Refresh button on Gutenberg WP Latest Posts block
  • Add : Move the max number of news loaded on the main config tab
  • Add : Automatically activate theme background on click
  • Add : Better default image when no image is found
  • Add : Change some radio buttons to switcher on theme settings
  • Fix : Icon missing on default theme when user isn’t connected
  • Fix : Update some description text

4.6.0

  • Add : Gutenberg block with latest news preview on admin
  • Add : Display the count of news content that will be loaded
  • Add : Direct link to the News post
  • Add : Quick shortcode copy on new block list
  • Add : Move the publication status to the block configuration

4.5.0

  • Add : New UX for Blocks and Configuration
  • Add : Settings UX with AJAX search engine
  • Add : Hide settings when not related to the theme selected
  • Add : Plugin installer with quick configuration
  • Add : Environment checker on install (PHP Version, PHP Extensions, Apache Modules)
  • Add : System Check menu to notify of server configuration problems after install
  • Add : Add actions and filters for developers

4.4.0

  • Add : Progressive loading in default theme, performance optimization
  • Add : Setting to define arrows color and arrows hover color
  • Add : Overlay color on image mouse hover
  • Add : Read more button design option

4.2.4

  • Fix : Put the PRO notifications under the content management
  • Fix : Image stretched to fit this size even if the setting is set to off

4.0.0

  • Add : Change the default theme HTML structure from table to div
  • Add : Remove the old news generation framework (optimization)
  • Add : Add the between date range possibility as a filter
  • Add : Option to open news links in a new window

3.8.0

  • Fix : Convert from .js.php to .js, security fix
  • Fix : Remove old default theme and fallback to new one
  • Fix : Issue in case of 2+ news block with ‘load more’ feature activated

3.6.0

  • Add : Add option to display the post category
  • Add : Add an option to display a message when there’s no post found
  • Add : Advanced Custom Fields (ACF) full integration — PRO version
  • Add : Load posts from latest: hours, days, months, years — PRO version

3.5.1

  • Add : Add loader when admin interface loading
  • Add : Add option for image’s position on default theme: center, left, right
  • Fix : Error 500 when select custom post with all taxonomies
  • Fix : Issue ‘all post categories’ selection not working
  • Fix : Navigation dots moving on slider
  • Fix : Option feature image in image source doesn’t work
  • Fix : Responsive issue for flexslider
  • Fix : Apply hook the_title before display title

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

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

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

<?php global $query_string; $paged = get_query_var( ‘paged’, 1 ); $loop = new WP_Query( $args ); $categoryvariable = $cat; // Вводим свои значения // Текущая дата $date1 = date(‘Y-m-d’); // Текущая дата + 12 месяцев $date2 = date(‘Y-m-d’, strtotime(‘+12 month’)); $args = array( ‘post_type’ => ‘post’, ‘cat’ => $categoryvariable, // Выводим по произвольному полю ‘meta_key’  => ‘premiere’, // Нужен для правильной работы пангинации ‘paged’     => $paged, ‘orderby’   => ‘meta_value’,     ‘order’     => ‘ASC’, ‘meta_query’=> array(     ‘key’       => ‘premiere’,     // Сравниваем значения двух дат     ‘value’     => array($date1,$date2),     // Обозначаем, что будет дата, формат ГодМесяцДень     ‘type’      => ‘DATE’,     // Сравниваем две даты, пример вывода: array(‘20500401′,’20500405’)     ‘compare’   => ‘BETWEEN’     // Сравниваем, что не пустое. Если пустое — то не выводим.     // ‘meta_compare’ => ‘!=’, ),       ); query_posts( $args ); ?>

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

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

<?php global $query_string; $paged = (get_query_var(‘paged’)) ? get_query_var(‘paged’) : 1; $loop = new WP_Query( $args ); $categoryvariable = $cat; $args = ‘cat=’ . $categoryvariable . ‘&meta_key=1Year&orderby=meta_value_num&order=DESC&paged=’.$paged; query_posts( $args ); ?><?php if (have_posts()) : while (have_posts()) : the_post(); ?><?php get_template_part( ‘/random’ ); ?><?php endwhile; ?><?php endif; ?><?php wp_reset_query(); // Аннулирует данные произвольного запроса WP_Query // Если после цикла используется функция wp_reset_query() для «сброса» данных, // то wp_reset_postdata() использовать не нужно! ?>

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

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

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

<?php global $query_string; $paged = get_query_var( ‘paged’, 1 ); $loop = new WP_Query( $args ); $categoryvariable = $cat; $args = array(     ‘post_type’ => ‘post’,     ‘cat’ => $categoryvariable,     // Исключаем категорию     ‘cat’       => ‘-310’,       // Выводим по произвольному полю     ‘meta_key’  => ‘1Budget2’,     // Нужен для правильной работы пангинации     ‘paged’     => $paged,       ‘meta_query’=> array(         // Сравниваем поле бюджет с цифрой, меньше которой записи не выводить         ‘key’       => ‘1Budget2’,         ‘compare’   => ‘>=’,         ‘value’     => 100000000,         ‘type’      => ‘numeric’,         // Сравниваем, что не пустое. Если пустое — то не выводим.         // ‘meta_compare’ => ‘!=’,     ),     // Сортируем все записи по годам     ‘orderby’    => ‘meta_value_num’,     // От большего к меньшему     ‘order’      => ‘DESC’,               ); query_posts( $args ); ?>

Выводим случайные цитаты в сайдбаре

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


<?php /* 
* Создание нового типа записей "Quotes" 
*/ function quote_post_type() { 
$args = array( 'label' => 'Quotes',
      'public' => true
);
   register_post_type( 'quotes', $args );
}
add_action( 'init', 'quote_post_type' );

// Установка параметров.
$args = array(
   // получение записей типа "quotes".
   'post_type' =>'quotes',
   // Случайная Сортировка.
   'orderby' => 'rand',
   // Получение только одной записи.
   'posts_per_page' => 1,
);

// Создание нового запроса.
$my_query = new WP_Query( $args );

?>

Здесь мы создаем тип записи, а затем с помощью запроса создаем цикл в сайдбаре. Простое и элегантное решение.

Ссылка на основную публикацию