Как установить избранные записи с помощью чекбокса на экране редактирования?
Я хочу сделать выбор избранной записи простым выделением чекбокса на экране редактирования И иметь возможность получать эти избранные статьи только из определенной категории?
Коротко, что мне нужно:
установить избранную запись
выводить избранные записи только из конкретной категории (не все записи)
Кто-нибудь может помочь? Заранее спасибо :)

Вы можете сделать это, выполнив следующие шаги:
- Добавьте пользовательский метабокс к вашим записям
- Создайте функцию для сохранения метаданных, используя действие save_post
- Добавьте аргумент запроса 'meta_key' в любой используемый вами запрос.
Поместите этот код в файл functions.php вашей темы:
function register_post_assets(){
add_meta_box('featured-post', __('Избранная запись'), 'add_featured_meta_box', 'post', 'advanced', 'high');
}
add_action('admin_init', 'register_post_assets', 1);
function add_featured_meta_box($post){
$featured = get_post_meta($post->ID, '_featured-post', true);
echo "<label for='_featured-post'>".__('Сделать запись избранной?', 'foobar')."</label>";
echo "<input type='checkbox' name='_featured-post' id='featured-post' value='1' ".checked(1, $featured)." />";
}
function save_featured_meta($post_id){
// Здесь можно добавить проверку типа записи, nonces, автсохранения и т.д.
if (isset($_REQUEST['_featured-post']))
update_post_meta(esc_attr($post_id, '_featured-post', esc_attr($_REQUEST['_featured-post'])));
// Я предпочитаю использовать _ перед названиями своих произвольных полей, чтобы их можно было редактировать только в моей форме, а не через стандартный интерфейс произвольных полей
}
add_action('save_post', 'save_featured_meta');
Затем в вашем шаблонном файле используйте следующий код для основного цикла:
$args = array(
'meta_key' => '_featured-post', // включаем префикс _ в названии ключа
'meta_value' => 1
);
// Количество отображаемых записей будет определяться в Настройках->Чтение
query_posts($args);
if(have_posts()): while(have_posts()): the_post();
// Ваш код здесь
endwhile; else:
endif;
ТОЛЬКО ДЛЯ ПРИМЕРА: Для пользовательских циклов (если на странице несколько циклов), используйте следующее:
$args = array(
'posts_per_page' => 5,
'meta_key' => '_featured-post',
'meta_value' => 1
);
$featured = new WP_Query($args);
if ($featured->have_posts()): while($featured->have_posts()): $featured->the_post();
the_title();
the_content();
endwhile; else:
endif;

Зачем выполнять второй (новый) WP Query? Разве недостаточно проверить значение метаполя?

Я не говорил создавать второй цикл. Я показывал ему для примера, если бы он хотел запустить несколько циклов на одной странице. В Codex сказано использовать query_posts для основного цикла и new WP_Query для второго пользовательского цикла. Недоразумение не заслуживало -1. :)

Исправлено. Кстати: посмотрите этот ответ. Также стоит отметить, что возможно лучшим выбором будет использование фильтров для модификации запроса.

Я предполагаю, что большинство реализаций "избранных" записей используют вторичный цикл, а не основной Loop — обычно в виде списка избранных записей или слайдера, который отображает избранные записи и т. д.

Просто заметка о коде для functions.php — думаю, там не хватает закрывающей скобки ")" в строке 15. Возможно?

Ребята, у меня не обновляется произвольное поле... в чём может быть дело?

@BrianFegter, я знаю, что этот ответ довольно старый, но сейчас он не работает. Я имею в виду, что я вижу опцию "Feature this post?" с чекбоксом на странице записи (внизу поста), я выбираю её и обновляю, что работает отлично, но сейчас я пытаюсь отобразить на своей странице выбранные записи, и это не работает.

Я попробовал запустить этот код, и он очень помог мне в отображении избранной записи на главной странице для моего пользовательского типа записей "Кейс-стади". Большое спасибо.
<?php $args = array(
'post_type' => 'case_studies',
'posts_per_page' => 1,
'meta_key' => 'featured_post',
'meta_value' => 1
);
$featured = new WP_Query($args);
if ($featured->have_posts()): while($featured->have_posts()): $featured->the_post(); ?>
<div class="c-image"><?php the_post_thumbnail('large'); ?></div>
<div class="cstext">
<article>
<h2><?php the_title(); ?></h2>
<span class="sub-title"> USAF SOCONS </span>
<?php the_content(); ?>
<a href="<?php echo get_permalink(); ?>" class="readmore">Узнать больше</a>
</article>
<a href="/case-studies" class="btn-primary">Посмотреть все кейс-стади</a>
</div>
<?php
endwhile;
else: 'Контент не добавлен';
endif; ?>
</div>
</div>
