Прикрепленные посты в WordPress без плагинов

Admin WordPress

Будем прикреплять посты к категориям.

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

Мы же уберем прикрепление у главной страницы и закрепим у категорий.

Есть множество способов изменить query запрос, который и формирует вывод постов. Мы будем использовать один из вариантов.

1. Уберем прикрепленные посты с главной страницы

// Убираем прикрепленные посты с главной
$args = [
    // Игнорирует прикрепленные посты и показывает их в общем потоке
    'ignore_sticky_posts' => 1
];
global $wp_query;
query_posts(
    array_merge(
        $wp_query->query,
        $args
    )
);

Этот код нужно поместить в index.php перед кодом:

if (have_posts()) : while (have_posts()) : the_post();

2. Закрепим прикрепленные посты в категориях

Теперь в шаблоне категорий, обычно это страница archive.php, вместо кода:

if (have_posts()) : while (have_posts()) : the_post();
 else :
 endif;

добавим следующий код:

/**
 * Первый LOOP с прикрепленными постами
 */


// Определяем прикрепленные посты
$sticky = get_option('sticky_posts');

// Формируем запрос
$args   = [
    'post__in' => $sticky,
];

// Добавляем в запрос
global $wp_query;
query_posts(
    array_merge(
        $wp_query->query,
        $args
    )
);

while ($wp_query->have_posts()) : $wp_query->the_post();
    get_template_part('/add/archive/article');
endwhile;
wp_reset_query();


/**
 * Второй LOOP без прикрепленных постов
 */


// Формируем запрос
$args = [
    'post__not_in' => $sticky
];

// Добавляем в запрос
global $wp_query;
query_posts(
    array_merge(
        $wp_query->query,
        $args
    )
);

while ($wp_query->have_posts()) : $wp_query->the_post();
    get_template_part('/add/archive/article');
endwhile;

// Добавим навигацию
if (have_posts()) {
    get_template_part('/add/archive/navigation');
}

3. Добавим уникальности заголовку

Перед заголовком такой новости добавим код:

// Определяем прикрепленные посты
$sticky = get_option('sticky_posts');

$stickyText = '';
if (in_array(get_the_ID(), $sticky, true) &&
     (!is_home() || !is_front_page())
) {
    $stickyText = 'Прикреплено';
}

// Отображаем запланированные записи и черновики
if (current_user_can('activate_plugins')) {
    $postStatus = get_post_status();

    if ($postStatus === 'draft') {
        echo 'Черновик';
    } elseif ($postStatus === 'future') {
        echo 'Запланировано';
    } elseif ($sticky) {
        echo $stickyText;
    }
}

Вот и все. В коде выше есть также отметки «Черновик» и «Запланировано». Все это также можно добавить внутрь текущего query запроса. Как это сделать можно узнать из этой статьи.

Если вам пригодилась информация, вы можете поблагодарить автора сайта символическим пожертвованием:

Добавить комментарий

Напишите свой комментарий, если вам есть что добавить/поправить/спросить по теме текущей статьи:
"Прикрепленные посты в WordPress без плагинов"