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

26 мар. 2013 г., 16:21:50
Просмотры: 25.6K
Голосов: 30

Я рассматриваю возможность переноса сайта с Drupal на WordPress и пытаюсь разобраться в различиях между системами - особенно в том, что касается CCK/полей, пользовательских типов содержимого и различных способов использования таксономии.

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

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

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

1
Комментарии

Похожий вопрос: https://wordpress.stackexchange.com/questions/251877/get-post-according-to-current-taxonomy

Jesse Nickles Jesse Nickles
26 февр. 2023 г. 00:08:03
Все ответы на вопрос 3
3
20

Общая таксономия для нескольких типов записей

Хотел бы узнать, могут ли два пользовательских типа записей использовать одну общую таксономию.

Короткий ответ: Да, могут.

Как это реализовать

Всегда следует регистрировать пользовательские таксономии и типы записей во взаимосвязи друг с другом как можно раньше.

Оформите процесс регистрации в виде функции, подключенной к хуку 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'] и связывают его с объектом типа записи.

Важное замечание

Главное - убедитесь, что вы регистрируете таксономию и тип записей во взаимосвязи друг с другом в момент их регистрации. В противном случае у вас не будет доступа к этой взаимосвязи во время хуков запросов.

26 мар. 2013 г. 16:46:32
Комментарии

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

Meetai.com Meetai.com
6 мар. 2014 г. 09:23:13

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

That Brazilian Guy That Brazilian Guy
16 янв. 2019 г. 05:03:22

@ThatBrazilianGuy Да, ответ именно так и делает. По нескольким причинам. Пожалуйста, внимательно прочитайте ответ.

kaiser kaiser
21 апр. 2020 г. 01:04:54
1
15

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

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 ) );   
}
31 мар. 2017 г. 16:11:36
Комментарии

Это должен быть принятый ответ, на мой взгляд. Кратко и по делу.

FaCE FaCE
21 июн. 2019 г. 14:33:00
0

Из Кодекса:

таксономии

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

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

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

26 мар. 2013 г. 16:33:42