в Wordpress

WordPress: register_post_type и default taxonomies

Проблема

WordPress 3+ принес нам возможность создавать свои типы постов. Останавливаться на этом сейчас не буду, благо FAQ полно. Есть маленький нюанс, связанный с одной из опций метода register_post_type. Я столкнулся сегодня с тем, что при регистрации своего типа к нему не подключились категории. Решение оказалось тривиальным.

Решение

Вот код регистрации типа данных Course

  1. <?
  2.     register_post_type(‘course’,
  3.         array(
  4.             ‘labels’ => array(
  5.                 ‘name’                  => __(‘Courses’),
  6.                 ‘singular_name’         => __(‘Course’),
  7.                 ‘not_found’             => __(‘No courses found’),
  8.                 ‘not_found_in_trash’    => __(‘No courses found in Trash’),
  9.                 ‘edit_item’             => __(‘Edit Course’),
  10.                 ‘search_items’          => __(‘Search Courses’),
  11.                 ‘view_item’             => __(‘View Course’),
  12.                 ‘new_item’              => __(‘New Course’),
  13.                 ‘add_new’               => _x(‘Add New’, ‘course’),
  14.                 ‘add_new_item’          => __(‘Add New Course’),
  15.             ),
  16.             ‘public’                => true,
  17.             ‘exclude_from_search’   => true,
  18.             ‘menu_position’         => 20,
  19.             ‘taxonomies’            => array(‘category’),
  20.             ‘supports’              => array(
  21.                 ‘title’,
  22.                 ‘editor’,
  23.                 ‘page-attributes’,
  24.                 ‘custom-fields’
  25.             ),
  26.             ‘show_in_nav_menus’     => false,
  27.         )
  28.     );

Обратите внимание на строку 'taxonomies' => array('category'),. Казалось бы все правильно. Но в интерфейсе категории так и не появились.
Копнув по-глубже я обнаружил, что мой код вызывается раньше кода регистрации taxonomy Category.
Проблему решило заключение кода в функцию и добавление action’a в точку init

  1. <?
  2. add_action(‘init’, ‘initCustomPostTypes’);
  3. function initCustomPostTypes()
  4. {
  5.     //Courses
  6.     register_post_type(‘course’,
  7.         array(
  8.             ‘labels’ => array(
  9.                 ‘name’                  => __(‘Courses’),
  10.                 ‘singular_name’         => __(‘Course’),
  11.                 ‘not_found’             => __(‘No courses found’),
  12.                 ‘not_found_in_trash’    => __(‘No courses found in Trash’),
  13.                 ‘edit_item’             => __(‘Edit Course’),
  14.                 ‘search_items’          => __(‘Search Courses’),
  15.                 ‘view_item’             => __(‘View Course’),
  16.                 ‘new_item’              => __(‘New Course’),
  17.                 ‘add_new’               => _x(‘Add New’, ‘course’),
  18.                 ‘add_new_item’          => __(‘Add New Course’),
  19.             ),
  20.             ‘public’                => true,
  21.             ‘exclude_from_search’   => true,
  22.             ‘menu_position’         => 20,
  23.             ‘taxonomies’            => array(‘category’),
  24.             ‘supports’              => array(
  25.                 ‘title’,
  26.                 ‘editor’,
  27.                 ‘page-attributes’,
  28.                 ‘custom-fields’
  29.             ),
  30.             ‘show_in_nav_menus’     => false,
  31.         )
  32.     );
  33. }
  • Kraker10

    спасибо большое