Как создать рекомендуемую запись в пользовательском типе записи?

21 февр. 2011 г., 17:12:25
Просмотры: 15K
Голосов: 3

Делается ли это точно так же, как с обычными записями? Я использую глобальную переменную $featured_cat и получаю из нее данные. Следует ли делать так же и здесь?

Или стоит использовать связанную пользовательскую таксономию? Возможно, я усложняю? Будет ли реальная польза от таксономий?

Какой правильный подход в этом случае?

2
Комментарии

Можете уточнить в своем вопросе, что представляет собой ваша переменная $global_cat? Это ID конкретной категории под названием "Featured"?

Jan Fabry Jan Fabry
21 февр. 2011 г. 17:22:22

Нет-нет.. в functions.php я использую глобальную переменную $featured_cat, чтобы задать одну выделенную категорию. Вообще-то, это несущественная информация с моей стороны, потому что все, что мне действительно нужно знать, — это как назначить выделенный пост в серии записей произвольного типа.

Amit Erandole Amit Erandole
21 февр. 2011 г. 17:30:55
Все ответы на вопрос 2
0

Регистрация типа записи "Видео" и "Таксономии Избранное" "Пользовательского мета-поля с выпадающим списком для избранного"

Тип записи:

function c3m_reg_vid_post() {
            
              $labels = array(
                'name' => _x('Видео', 'общее название типа записи'),
                'singular_name' => _x('Видео', 'название типа записи в единственном числе'),
                'add_new' => _x('Добавить новое', 'видео'),
                'add_new_item' => __('Добавить новое видео'),
                'edit_item' => __('Редактировать видео'),
                'new_item' => __('Новое видео'),
                'view_item' => __('Просмотреть видео'),
                'search_items' => __('Искать видео'),
                'not_found' =>  __('Видео не найдены'),
                'not_found_in_trash' => __('В корзине видео не найдены'), 
                'parent_item_colon' => ''
              );
              $args = array(
                'labels' => $labels,
                'public' => true,
                'publicly_queryable' => true,
                'show_ui' => true, 
                'query_var' => true,
                'show_in_nav_menus' => true,
                'can_export' => true,
                'rewrite' => array('slug' => 'video', 'with_front' => false),
                'capability_type' => 'post',
                'register_meta_box_cb' => 'c3m_video_meta', //Это для нашего пользовательского метабокса
                'hierarchical' => false,
                'menu_position' => 10,
               'taxonomies' => array('featured'),
                'supports' => array('title', 'editor' 'custom-fields')
              ); 
              register_post_type('video', $args );
}

###Таксономия

Подумав еще раз, давайте использовать пользовательское поле для избранных видео и создадим выпадающий список в метабоксе для выбора, является ли запись избранной.

Настройка пользовательского метабокса:

//хук для добавления метабокса
add_action( 'add_meta_boxes', 'c3m_video_meta' );

function c3m_video_meta() {
    //создаем пользовательский метабокс
    add_meta_box( 'c3m-meta', 'Выбор избранного видео', 'c3m_mbe_function', 'video', 'normal', 'high' );
}

function c3m_mbe_function( $post ) {

    //получаем значения метаданных, если они существуют
    $c3m_mbe_featured = get_post_meta( $post->ID, '_c3m_mbe_featured', true );

    echo 'Выберите "Да" ниже, чтобы сделать видео избранным';
    ?>
    <p>Избранное: 
    <select name="c3m_mbe_featured">
        <option value="No" <?php selected( $c3m_mbe_featured, 'no' ); ?>>Нет</option>
        <option value="Yes" <?php selected( $c3m_mbe_featured, 'yes' ); ?>>Да, сделать видео избранным</option>
    </select>
    </p>
    <?php
}

//хук для сохранения данных метабокса
add_action( 'save_post', 'c3m_mbe_save_meta' );
function c3m_mbe_save_meta( $post_ID ) {
    global $post;
    if( $post->post_type == "video" ) {
        if ( isset( $_POST ) ) {
            update_post_meta( $post_ID, '_c3m_mbe_featured', strip_tags( $_POST['c3m_mbe_featured'] ) );
        }
    }
}

}

Вот наш крутой маленький селектор избранных видео, который мы только что создали: Скриншот селектора избранных видео в WordPress

Теперь давайте запросим видео, которые помечены как избранные:

$args = array(
    'post_type' => 'video',
    'meta_query' => array(
        array(
            'key' => 'c3m_mbe_featured',
            'value' => 'yes',
            'compare' => 'NOT LIKE'
        )
    )
 );
$query = new WP_Query( $args );
23 апр. 2011 г. 08:42:28
3

Точно так же, как и с любым другим типом записей... используйте категорию... или любой другой предпочитаемый вами метод (метка, пользовательская таксономия, пользовательские метаданные/поля,...).

21 февр. 2011 г. 17:42:48
Комментарии

Понял, но хотелось бы увидеть пример с использованием пользовательской таксономии для пользовательского типа записей с видео.

Кто-нибудь?

Amit Erandole Amit Erandole
21 февр. 2011 г. 18:01:32

Полагаю, что "Закрепленные записи" не поддерживаются для пользовательских типов записей. По крайней мере, этот соответствующий тикет был отменён.

Jan Fabry Jan Fabry
21 февр. 2011 г. 18:18:12

@Ian Fabry ты прав, исправил ответ.

wyrfel wyrfel
22 февр. 2011 г. 05:56:18