Как установить избранные записи с помощью чекбокса на экране редактирования?

17 сент. 2011 г., 22:42:46
Просмотры: 15K
Голосов: 7

Я хочу сделать выбор избранной записи простым выделением чекбокса на экране редактирования И иметь возможность получать эти избранные статьи только из определенной категории?

Коротко, что мне нужно:

  • установить избранную запись

  • выводить избранные записи только из конкретной категории (не все записи)

Кто-нибудь может помочь? Заранее спасибо :)

0
Все ответы на вопрос 2
7
10

Вы можете сделать это, выполнив следующие шаги:

  1. Добавьте пользовательский метабокс к вашим записям
  2. Создайте функцию для сохранения метаданных, используя действие save_post
  3. Добавьте аргумент запроса '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;
18 сент. 2011 г. 04:58:35
Комментарии

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

kaiser kaiser
18 сент. 2011 г. 06:01:32

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

Brian Fegter Brian Fegter
18 сент. 2011 г. 06:21:37

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

kaiser kaiser
18 сент. 2011 г. 08:08:09

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

Chip Bennett Chip Bennett
19 окт. 2011 г. 19:43:20

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

Peanuts Peanuts
4 июл. 2013 г. 20:13:53

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

Peanuts Peanuts
4 июл. 2013 г. 21:05:14

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

Naren Verma Naren Verma
14 нояб. 2019 г. 11:00:10
Показать остальные 2 комментариев
0

Я попробовал запустить этот код, и он очень помог мне в отображении избранной записи на главной странице для моего пользовательского типа записей "Кейс-стади". Большое спасибо.

         <?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>  

3 апр. 2019 г. 05:14:47