Прикрепленные посты в 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 без плагинов"