Недавно один из наших читателей задал вопрос, возможно ли реализовать «важные» (прилепленные) записи для архивов пользовательских типов записей. По-умолчанию, в WordPress есть функционал для важных записей и прилепления их на главную страницу, но не для других пользовательских типов записей. В этой статье мы покажем вам как сделать важные записи для пользовательских типов архивов.
Добавляем прилепленные записи в пользовательские типы страниц
Прежде всего вам нужно установить и активировать плагин Sticky Custom Post Types. После активации плагина, идем в Настройки » Чтение и прокручиваем до раздела Sticky Custom Post Types. Далее, вам нужно выбрать пользовательский тип записи, которые вы хотите приклеить и включить его.
Все что мы проделали сейчас, это добавили функцию важных записей для наших пользовательских типов записей. Эти записи будут отображаться на главной ровно также, как и обычные.
Проблема в том, что по-умолчанию WordPress отображает эти записи ТОЛЬКО на главной. Он не приклеивает важные записи в архивах.
Выводим важные записи в пользовательском типе архивов
Давайте предположим, что у вас есть собственный тип записей для Обзоров Фильмов с включенным функционалом вышеупомянутого плагина. Теперь вы хотите, чтобы ваши прилепленные записи в типе записей обзоров фильмов отображались иначе и в верхней части не-прилепленных обычных обзоров фильмов. Вот так:
Для достижения этого, прежде всего нужно создать шаблон страницы для архива, в виде: archive-post-type.php. Например, если ваш пользовательский тип movie-reviews, то ваша страница архива должна быть archive-movie-reviews.php. Если у вас нет такого шаблона, создайте его. Просто скопируйте содержимое файла archive.php в папке с темой и вставьте его в новый файл archive-your-post-type.php.
Следующим шагом будет добавление кода в файл functions.php:
function wpb_cpt_sticky_at_top( $posts ) { // применять только к архивам if ( is_main_query() && is_post_type_archive() ) { global $wp_query; $sticky_posts = get_option( 'sticky_posts' ); $num_posts = count( $posts ); $sticky_offset = 0; // Ищем важные записи for ($i = 0; $i < $num_posts; $i++) { // Помещаем их в начале массива записей if ( in_array( $posts[$i]->ID, $sticky_posts ) ) { $sticky_post = $posts[$i]; // Убираем важные записи из текущей позиции array_splice( $posts, $i, 1 ); // Помещаем в начало, после других важных array_splice( $posts, $sticky_offset, 0, array($sticky_post) ); $sticky_offset++; // Убираем запись из массива важных $offset = array_search($sticky_post->ID, $sticky_posts); unset( $sticky_posts[$offset] ); } } // Ищем другие важные записи при необходимости if ( !empty( $sticky_posts) ) { $stickies = get_posts( array( 'post__in' => $sticky_posts, 'post_type' => $wp_query->query_vars['post_type'], 'post_status' => 'publish', 'nopaging' => true ) ); foreach ( $stickies as $sticky_post ) { array_splice( $posts, $sticky_offset, 0, array( $sticky_post ) ); $sticky_offset++; } } } return $posts; } add_filter( 'the_posts', 'wpb_cpt_sticky_at_top' ); // Добавляем "важный" класс в заголовках статей для отличия во внешнем виде function cpt_sticky_class($classes) { if ( is_sticky() ) : $classes[] = 'sticky'; return $classes; endif; return $classes; } add_filter('post_class', 'cpt_sticky_class');
Код выше переместит ваши ВАЖНЫЕ записи вверх, и если ваша тема использует функцию post_class(), то она добавит важность в класс записей.
Можно стилизировать ваши важные записи используя класс .sticky в вашей таблице стилей. Пример:
.sticky { background-color:#ededed; background-image:url('http://example.com/wp-content/uploads/featured.png'); background-repeat:no-repeat; background-position:right top; }
Надеемся, что статья помогла вам сделать важные записи для пользовательских типов архивов.