Как сделать важные записи для архивов пользовательских типов записей

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

Добавляем прилепленные записи в пользовательские типы страниц

Прежде всего вам нужно установить и активировать плагин Sticky Custom Post Types. После активации плагина, идем в Настройки » Чтение и прокручиваем до раздела Sticky Custom Post Types. Далее, вам нужно выбрать пользовательский тип записи, которые вы хотите приклеить и включить его.

enable-sticky-posts[1]

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

Проблема в том, что по-умолчанию WordPress отображает эти записи ТОЛЬКО на главной. Он не приклеивает важные записи в архивах.

Выводим важные записи в пользовательском типе архивов

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

sticky-post-custom-type[1]

Для достижения этого, прежде всего нужно создать шаблон страницы для архива, в виде: 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;
}

styling-sticky-posts[1]

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

VN:F [1.9.22_1171]
Rating: 0.0/5 (0 votes cast)

Об авторе ADv

Занимаюсь разработкой сайтов и магазинов на WordPress. Оказываю платные помощь и консультации. Skype: advokat_b
Scroll To Top