Запрос по почтовому формату
Я знаю, что я говорил ранее о том, что форматы записей не являются организационным инструментом, но пока вы помечаете свои видео как видео, изображения как изображения и т. Д., Вы также можете использовать это для организации своего сайта. Добавление избыточной таксономии не имеет никакого смысла. Тем более что форматы записей устанавливаются с помощью таксономии «post_format».
WP_Query
для WP_Query
. Чтобы запросить все сообщения в формате цитаты, мы должны создать наш WP_Query
следующим образом:
01
02
03
04
05
06
07
08
09
10
11
12
|
$args = array(
‘post_type’ => ‘post’,
‘tax_query’ => array(
array(
‘taxonomy’ => ‘post_format’,
‘field’ => ‘slug’,
‘terms’ => ‘post-format-quote’,
)
)
);
$query = new WP_Query( $args );
|
Обратите внимание, что в вышеприведенном примере термин имеет префикс «post-format-». Также имейте в виду, что мы можем передать массив терминов аргументу терминов в tax_query
чтобы выполнить запрос более чем в одном формате.
Создание меню формата пост
Если на вашем сайте много постов в нескольких форматах, вы, вероятно, захотите выделить каждый формат. Например, если вы визуальный художник, который использует свой блог для демонстрации своих видео и изображений и используете форматы записей, вы можете создать меню с вашими записями в формате видео и изображения отдельно.
Первым шагом является настройка массива аргументов для WP_Query
, точно так же как тот, который я показал вам выше, за исключением этого времени без специального формата поста, указанного в аргументе » tax_query
и массива форматов вместе с метками использовать в меню вывода.
Вот как выглядят эти два массива:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
// initial WP_Query args
$args = array(
‘post_type’ => ‘post’,
‘posts_per_page’ => 5,
‘tax_query’ => array(
array(
‘taxonomy’ => ‘post_format’,
‘field’ => ‘slug’,
)
)
);
// formats to show
$formats = array(
array(
‘name’ => ‘video’,
‘label’ => ‘Videos’
),
array(
‘name’ => ‘image’,
‘label’ => ‘Photos’
),
);
|
С помощью этих двух массивов мы можем создать цикл foreach
из второго массива, чтобы запрашивать сообщения с текущим форматом и выводить список сообщений. Это будет включать в каждую итерацию цикла добавление аргумента термина с помощью set()
, создание экземпляра WP_Query
, прохождение через него и затем сброс аргумента терминов.
Внутри WP_Query
while WP_Query
мы можем использовать get_term_link()
чтобы создать ссылку на страницу архива формата поста, который на самом деле является архивом терминов таксономии. Для отдельных сообщений мы можем использовать get_permalink()
для создания ссылки на сообщение. Вот как выглядит цикл:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
|
echo ‘<nav class=»menu»>’;
echo ‘<ul>’;
foreach ( $formats as $format ) {
//convert name key to the proper name for the term
$term_name = ‘post-format-‘.$format[ ‘name’ ];
//add a terms arg to the tax_query’s args
$args[ ‘tax_query’ ][ 0 ][ ‘terms’ ] = $term_name;
$query = new WP_Query( $args );
if ( $query->have_posts() ) {
echo ‘<li>’.get_term_link( $term_name, ‘post_format’ ).'</li>’;
echo ‘<ul class=»‘.$term_name.’-submenu»>’;
while ( $query->have_posts() ) {
echo ‘<li><a href=»‘.get_permalink( $query->post->ID ).'» />’.get_the_title( $query->post->ID ).'</a></li>’;
} //endwhile
wp_reset_postdata();
echo ‘</ul></li>’;
} //endif
//before moving to next itteration remove the term from the WP_Query args
unset( $args[ ‘tax_query’ ][ 0 ][ ‘terms’ ] );
} //endforeach
echo ‘</ul></nav>’;
|
Обязательно добавьте в разметку любые дополнительные классы или идентификаторы, чтобы этот общий код выглядел как меню в вашей теме, и не стесняйтесь заменять отображаемые форматы в соответствии с вашими потребностями.
Удаление почтовых форматов из основного индекса блога
Теперь, когда у вас есть меню для ваших форматов сообщений, вы можете исключить сообщения определенных форматов из основного индекса блога. Это позволит вам использовать свой блог в качестве блога и меню формата сообщений, чтобы выделить видео, изображения, аудиофайлы или другие отформатированные сообщения.
Чтобы сохранить сообщения определенного формата, вам нужно будет использовать фильтр pre_get_post
чтобы добавить tax_query
к основному запросу. tax_query
будет похож на те, что я вам уже показал, но у него будет дополнительный аргумент для исключения постов с форматом, используя аргумент «operator» Если установить для оператора значение «НЕ В», соответствующие сообщения будут исключены.
Этот запрос также будет is_home()
в условную is_home()
чтобы гарантировать, что он влияет только на основной индекс блога.
Вот как выглядит действие и функция обратного вызова:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
|
add_action( ‘pre_get_posts’, ‘slug_no_videos_home’ );
function slug_no_videos_home( $query ) {
if ( $query->is_home() && $query->is_main_query() ) {
$tax_query = array(
array(
‘taxonomy’ => ‘post_format’,
‘field’ => ‘slug’,
‘terms’ => ‘post-format-video’,
‘operator’ => ‘NOT IN’,
)
);
$query->set( ‘tax_query’, $tax_query );
}
return $query;
}
|
Как вы можете видеть в tax_query
, мы определяем tax_query
, используя оператор NOT IN
а затем используем метод set, чтобы добавить tax_query
к основному запросу индекса блога.
Иди дальше и отформатируй
В этой серии из пяти частей вы узнали, что такое форматы записей, как добавить их поддержку в вашу тему, как использовать их в цикле, настроить их на собственный CSS, массово обновить их и использовать в качестве организации контента. инструмент.
Вооружившись этими знаниями, вы можете создавать более мощные темы, которые делают переносимость данных легкой задачей.