Статьи

Получение большей части почтовых форматов: инструменты организации контента

Запрос по почтовому формату

Я знаю, что я говорил ранее о том, что форматы записей не являются организационным инструментом, но пока вы помечаете свои видео как видео, изображения как изображения и т. Д., Вы также можете использовать это для организации своего сайта. Добавление избыточной таксономии не имеет никакого смысла. Тем более что форматы записей устанавливаются с помощью таксономии «post_format».

Это означает, что мы можем использовать запрос, аналогичный тому, который мы использовали на предыдущем шаге, для запроса по таксономии, на этот раз с использованием таксономии «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, массово обновить их и использовать в качестве организации контента. инструмент.

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