Добавление поддержки таксономии категорий для произвольного типа записей

2 апр. 2012 г., 17:03:59
Просмотры: 42K
Голосов: 6

Я пишу код, который активно использует произвольные типы записей (custom post types), и ищу способ программно добавить категорию к определенному произвольному типу записей, а затем получить доступ к ID этой категории.

Я поискал информацию, но не смог найти надежный способ достижения этой цели - wp_create_category был бы очевидным выбором, но он, конечно, не поддерживает произвольные типы записей.

0
Все ответы на вопрос 3
0
11

Внутри функции register_post_type вы можете добавить параметр taxonomies.

register_post_type('discography',
    array(
    'labels' => array(
             //здесь указываются метки
             ),

  'taxonomies' => array('recordings', 'category', 'whatever'),  //добавьте эту строку....

  'public' => true,
  'show_ui' => true,
  'exclude_from_search' => true,
  'hierarchical' => true,
  'supports' => array( 'title', 'editor', 'thumbnail' ),
  'query_var' => true
        )
  );

Альтернативно вы можете использовать функцию register_taxonomy_for_object_type, http://codex.wordpress.org/Function_Reference/register_taxonomy_for_object_type

2 апр. 2012 г. 18:07:33
1

Пожалуйста, поместите этот код в файл functions.php вашей темы

function post_type_discog() {

register_post_type('discography',
    array(
    'labels' => array(
            'name' => __( 'Дискография' ),
            'singular_name' => __( 'Дискография' ),
            'add_new' => __( 'Добавить новую' ),
            'add_new_item' => __( 'Добавить новую запись в дискографию' ),
            'edit' => __( 'Редактировать' ),
            'edit_item' => __( 'Редактировать запись дискографии' ),
            'new_item' => __( 'Новая запись дискографии' ),
            'view' => __( 'Просмотр дискографии' ),
            'view_item' => __( 'Просмотр записи дискографии' ),
            'search_items' => __( 'Поиск записей дискографии' ),
            'not_found' => __( 'Записи дискографии не найдены' ),
            'not_found_in_trash' => __( 'В корзине записей дискографии не найдено' ),
            'parent' => __( 'Родительская запись дискографии' ),
        ),
  'public' => true,
  'show_ui' => true,
        'exclude_from_search' => true,
        'hierarchical' => true,
        'supports' => array( 'title', 'editor', 'thumbnail' ),
        'query_var' => true
        )
  );
}
add_action('init', 'post_type_discog');

add_action( 'init', 'create_discog_taxonomies', 0 );

function create_discog_taxonomies()
{
  // Добавляем новую таксономию, делаем её иерархической (как категории)
  $labels = array(
    'name' => _x( 'Записи', 'taxonomy general name' ),
    'singular_name' => _x( 'Запись', 'taxonomy singular name' ),
    'search_items' =>  __( 'Искать записи' ),
    'popular_items' => __( 'Популярные записи' ),
    'all_items' => __( 'Все записи' ),
    'parent_item' => __( 'Родительская запись' ),
    'parent_item_colon' => __( 'Родительская запись:' ),
    'edit_item' => __( 'Редактировать запись' ),
    'update_item' => __( 'Обновить запись' ),
    'add_new_item' => __( 'Добавить новую запись' ),
    'new_item_name' => __( 'Название новой записи' ),
  );
  register_taxonomy('recordings',array('discography'), array(
    'hierarchical' => true,
    'labels' => $labels,
    'show_ui' => true,
    'query_var' => true,
    'rewrite' => array( 'slug' => 'recordings' ),
  ));
}

Этот код позволяет создать пользовательский тип записи и пользовательский тип таксономии. Надеюсь, этот код будет вам полезен.

2 апр. 2012 г. 17:14:52
Комментарии

Спасибо — но это я уже сделал. Теперь мне нужно добавить реальные категории (в данном случае — добавить реальные записи)

George Pearce George Pearce
2 апр. 2012 г. 17:32:55
2

Если вам нужно заранее создать некоторые термины, вы можете добавить следующий код в функцию init, которая регистрирует таксономию. Это создаст термин "foo" в таксономии "recordings".

if (!term_exists( 'foo', 'recordings') ){
        wp_insert_term( 'foo', 'recordings' );
    })
2 апр. 2012 г. 18:27:21
Комментарии

Это идеально! Есть ли способ получить ID созданного термина? Я не очень четко сформулировал вопрос, так что большое спасибо.

George Pearce George Pearce
2 апр. 2012 г. 23:44:00

Функция wp_insert_term возвращает ID термина и таксономии, см.: http://codex.wordpress.org/Function_Reference/wp_insert_term#Return_Values Также можно использовать get_term_by: http://codex.wordpress.org/Function_Reference/get_term_by

helgatheviking helgatheviking
3 апр. 2012 г. 00:20:06