Могут ли несколько пользовательских типов записей использовать общую таксономию?
Я рассматриваю возможность переноса сайта с Drupal на WordPress и пытаюсь разобраться в различиях между системами - особенно в том, что касается CCK/полей, пользовательских типов содержимого и различных способов использования таксономии.
Я хотел бы узнать, могут ли два пользовательских типа содержимого использовать одну общую таксономию. В Drupal я могу ограничить публикацию определенного типа содержимого для группы пользователей, и эта публикация может иметь таксономию, которая используется совместно только с одним или несколькими другими типами содержимого (но не со всеми типами).
Оставляя в стороне аспект пользователей, который, похоже, возможен с помощью Role Scoper, можно ли сделать это в WordPress? Я видел только пользовательские типы содержимого с пользовательской таксономией, но нет способа использовать общую таксономию между 2 или более пользовательскими типами содержимого без её повторного создания в двух местах или глобального включения через категории/метки...
Спасибо, -Чад.
Общая таксономия для нескольких типов записей
Хотел бы узнать, могут ли два пользовательских типа записей использовать одну общую таксономию.
Короткий ответ: Да, могут.
Как это реализовать
Всегда следует регистрировать пользовательские таксономии и типы записей во взаимосвязи друг с другом как можно раньше.
Оформите процесс регистрации в виде функции, подключенной к хуку init
с приоритетом по умолчанию.
<?php
/** Plugin Name: Регистрация $CPT и $CT */
add_action('init', function() {
register_taxonomy(
'some_custom_tax',
'some_post_type',
$array_of_arguments
);
register_post_type(
'some_post_type',
[
'taxonomies' => [ 'some_custom_tax' ],
// другие параметры
]
);
}, 10 ); # <-- приоритет по умолчанию
Не имеет значения, используете ли вы второй аргумент функции register_taxonomy()
или функцию register_taxonomy_for_object_type()
, так как они выполняют одно и то же: работают с массивом $GLOBALS['wp_taxonomies']
и связывают его с объектом типа записи.
Важное замечание
Главное - убедитесь, что вы регистрируете таксономию и тип записей во взаимосвязи друг с другом в момент их регистрации. В противном случае у вас не будет доступа к этой взаимосвязи во время хуков запросов.

Одна из проблем, которую я обнаружил, заключается в том, что административная панель неправильно отображает количество записей для пользовательского типа записи (CPT), как только общий тип контента (CT) используется где-то ещё.

Я не уверен, что правильно понял. Вопрос касается регистрации типа контента (CT) для нескольких пользовательских типов записей (CPT). Этот ответ, похоже, демонстрирует взаимную регистрацию CPT и CT друг с другом в обоих направлениях.

Мне удалось легко добиться этого, передав массив всех пользовательских типов записей, для которых я хочу использовать таксономию. Мой код выглядел так:
add_action( 'init', 'build_taxonomies', 0 );
function build_taxonomies() {
register_taxonomy( 'some_custom_tax', array('some_post_type_1','some_post_type_2'), array( 'hierarchical' => true, 'label' => 'Заголовок пользовательской таксономии', 'query_var' => true, 'rewrite' => true ) );
}

таксономии
(массив) (необязательно) Массив зарегистрированных таксономий, таких как category или post_tag, которые будут использоваться с этим типом записи. Это может быть использовано вместо прямого вызова
register_taxonomy_for_object_type()
. Пользовательские таксономии всё равно должны быть зарегистрированы с помощьюregister_taxonomy()
.
При регистрации типа записи вы назначаете таксономии, которые он поддерживает, или используете register_taxonomy_for_object_type()
в любой другой момент, чтобы добавить таксономию к типу записи.
Вы можете назначить таксономию для любого количества типов записей. Таксономии не привязаны к конкретному типу записи.
