Могут ли несколько пользовательских типов записей совместно использовать пользовательскую таксономию?
Я подумываю о перестройке сайта drupal в wordpress и все еще обдумываю различия между системами - в частности, cck/поля и пользовательские типы контента, а также различные способы использования таксономии.
Я хотел бы знать, могут ли два пользовательских типа контента совместно использовать одну пользовательскую таксономию. В drupal я могу ограничить публикацию определенного типа контента группой пользователей, а затем эта публикация может иметь таксономию, доступную только одному или больше других типов контента (но не всех типов).
Оставляя пользовательский аспект, который представляется возможным с помощью role scoper, можете ли вы сделать это с wordpress? Я видел только пользовательский тип контента с пользовательской таксономией, но не мог разделить данную таксономию между 2 или более пользовательскими типами контента, не воссоздав ее в двух местах или не включив ее глобально с помощью категорий/тегов...
Спасибо, - Чад.
3 answers
Совместное использование таксономии между CPTS
Я хотел бы знать, могут ли два пользовательских типа контента совместно использовать одну пользовательскую таксономию.
Просто сказал: Да, они могут.
Как поделиться
Вы должны всегда регистрировать пользовательские таксономии и типы сообщений друг другу как можно раньше.
Оберните процесс регистрации в функцию, подключенную к крючку init
с приоритетом по умолчанию.
<?php
/** Plugin Name: Register $CPT and $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' ],
// other arguments
]
);
}, 10 ); # <-- default priority
Не имеет значения, если вы используете 2 и аргумента для register_taxonomy()
или, если вы используете register_taxonomy_for_object_type()
, так как оба делают одно и то же: они берут массив $GLOBALS['wp_taxonomies']
и присваивают ему объект типа post (тип).
Важное примечание
Просто убедитесь, что вы регистрируете CT и CPT друг другу при их регистрации. В противном случае у вас не будет доступа к этому соединению во время обработки запросов.
Я смог легко добиться этого, передав массив всех пользовательских типов записей, которыми я хочу поделиться с таксономией, поэтому мой код выглядел так:
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' => 'Custom Tax Title', 'query_var' => true, 'rewrite' => true ) );
}
Таксономии
(массив) (необязательно) Массив зарегистрированных таксономий, таких как категория или post_tag, которые будут использоваться с этим типом записи. Это можно использовать вместо прямого вызова
register_taxonomy_for_object_type()
. Пользовательские таксономии все еще должны быть зарегистрированы вregister_taxonomy()
.
Когда вы регистрируете свой тип записи, вы назначаете таксономии, которые он поддерживает, или используете register_taxonomy_for_object_type()
в какой-то другой момент, чтобы добавить таксономию в сообщение тип.
Вы можете назначить таксономию любому количеству типов записей, как вам нравится. Таксономии не привязаны к определенному типу записей.