Могут ли несколько пользовательских типов записей совместно использовать пользовательскую таксономию?


Я подумываю о перестройке сайта drupal в wordpress и все еще обдумываю различия между системами - в частности, cck/поля и пользовательские типы контента, а также различные способы использования таксономии.

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

Оставляя пользовательский аспект, который представляется возможным с помощью role scoper, можете ли вы сделать это с wordpress? Я видел только пользовательский тип контента с пользовательской таксономией, но не мог разделить данную таксономию между 2 или более пользовательскими типами контента, не воссоздав ее в двух местах или не включив ее глобально с помощью категорий/тегов...

Спасибо, - Чад.

Author: kaiser, 2013-03-26

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 друг другу при их регистрации. В противном случае у вас не будет доступа к этому соединению во время обработки запросов.

 19
Author: kaiser, 2021-02-04 21:54:11

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

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 ) );   
}
 12
Author: Kevin Ochieng, 2017-03-31 13:11:36

Из Кодекса:

Таксономии

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

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

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

 6
Author: s_ha_dum, 2013-03-26 14:33:42