Термины пользовательской таксономии не отображаются списком в редакторе Gutenberg

6 мар. 2019 г., 19:11:22
Просмотры: 13.5K
Голосов: 15

Я создал пользовательскую таксономию, которую связал с моим CPT. Оба элемента отображаются в админ-панели, но проблема в том, что при добавлении контента и попытке выбрать термин из списка пользовательской таксономии нет никаких значений (нет списка, чекбоксов...). Я использую WordPress 5.1. Вот код, добавленный в functions.php:

function type_custom_taxonomy() {

  $labels = array(
    'name' => _x( 'Типы', 'общее название таксономии' ),
    'singular_name' => _x( 'Тип', 'название таксономии в единственном числе' ),
    'menu_name' => __( 'Типы' ),
  );    

  register_taxonomy('types',array('action'), array(
    'labels' => $labels,
    'hierarchical'               => true,
    'public'                     => true,
    'show_ui'                    => true,
    'show_admin_column'          => true,
    'show_in_rest'               => true,
    'show_tagcloud'              => false,
  ));
}

add_action( 'init', 'type_custom_taxonomy', 0 );

Скриншот проблемы с таксономией

// CPT (Пользовательский тип записи)
function action_post_type() {
  register_post_type( 'action',
    array(
      'labels' => array(
        'name' => __( 'Действия' ),
        'singular_name' => __( 'Действие' )
      ),
      'public' => true,
      'has_archive' => true,
      'show_in_rest'       => true,
      'supports'     => array('title', 'editor','thumbnail'),
      'taxonomies' => array('types')
    )
  );
}
add_action( 'init', 'action_post_type' );
2
Комментарии

И как у вас зарегистрирован CPT?

Krzysiek Dróżdż Krzysiek Dróżdż
6 мар. 2019 г. 19:36:28

Я отредактировал свой пост

Hanane Hanane
6 мар. 2019 г. 19:45:55
Все ответы на вопрос 6
3
38

Я столкнулся с такой же проблемой и решил её следующим образом:

Необходимо добавить 'show_in_rest' => true, как для типа записи, так и для таксономий в последней строке массива, например:

register_post_type(
'portfolio',
 array(
 'labels'              => $labels,
 'exclude_from_search' => false,
'has_archive'         => true,
'public'              => true,
'publicly_queryable' => false,
'rewrite'  => false,
'can_export'          => true,
'show_in_nav_menus'   => true,
'supports'            => array('title', 'editor', 'thumbnail', 'comments', 'page-attributes','excerpt'),
'show_in_rest' =>true,
 )
);

Для таксономии:

register_taxonomy(
'portfoliocat',
'portfolio',
 array(
 'hierarchical'      => true,
 'show_in_nav_menus' => true,
'labels'            =>array(),
 'query_var'         => true,
 'rewrite'           => array('slug' => 'portfoliocat'),
 'show_in_rest' => true,
    )
  );
14 апр. 2019 г. 23:31:50
Комментарии

У меня это было в моем CPT, но не в регистрации таксономии, это решило мою проблему.

Faye Faye
26 июн. 2019 г. 21:08:50

Это правильный ответ

user1676224 user1676224
29 нояб. 2019 г. 17:08:33

Думаю, возможно был момент, когда первый "выбранный" ответ был решением, но в 2020 году кажется, что 'show_in_rest' => true, - это то, чего не хватает, если ваша проблема в том, что таксономия отображается в классическом редакторе, но не в Блок-редакторе.

jerclarke jerclarke
28 авг. 2020 г. 21:36:10
6

Изменение слага таксономии работает для меня. Не знаю причины, но это работает.

12 мар. 2019 г. 00:03:38
Комментарии

ты имеешь в виду, что я должен добавить 'rewrite' => array( 'slug' => 'type' ), у меня это не сработало, можешь, пожалуйста, показать код

Hanane Hanane
12 мар. 2019 г. 12:05:25

Нет, я не пробовал использовать rewrite, но я изменил slug в вызове register_taxonomy вот так: register_taxonomy( 'kt-types', array('action'), $args). Я попробовал это локально, и у меня сработало.

Mehmood Ahmad Mehmood Ahmad
12 мар. 2019 г. 12:16:30

Да, это работает, когда я меняю types на action-types. Большое спасибо, mahmood. Можешь написать свой ответ как решение, чтобы я мог принять его?

Hanane Hanane
13 мар. 2019 г. 18:53:40

Рад, что всё работает. Я уже добавил свой ответ в качестве решения. Хотите, чтобы я объяснил его подробнее?

Mehmood Ahmad Mehmood Ahmad
13 мар. 2019 г. 19:08:14

Извините, я не заметил, мне всё понятно, спасибо

Hanane Hanane
13 мар. 2019 г. 19:09:24

Не стоит изменять ярлык (slug), это не решение проблемы. Но отлично подходит, если вы хотите навредить своему SEO. Вам нужно добавить 'show_in_rest' => true, в аргументы.

user1676224 user1676224
29 нояб. 2019 г. 17:10:18
Показать остальные 1 комментариев
1

Я также могу воспроизвести эту проблему. Добавление параметра show_in_rest в функцию register_taxonomy, как предлагают многие, обычно было бы правильным решением, но не полным в вашем случае. Это происходит потому, что конечная точка REST types уже используется самим WordPress. Запрос к https://example.com/wp-json/wp/v2/types возвращает зарегистрированные типы записей, и поэтому Gutenberg не понимает его. Смотрите https://developer.wordpress.org/rest-api/reference/post-types/

Таким образом, изменение слага (slug) — вероятно, лучший выход. Если ваш сайт уже работает, возможно, стоит рассмотреть правила перезаписи (rewrite rules), чтобы не пострадала SEO-оптимизация.

Тем не менее, даже если вы измените слаг, вам всё равно нужно добавить параметр show_in_rest при использовании Gutenberg.

20 янв. 2020 г. 09:52:49
Комментарии

+1 за хорошо проанализированный и информативный ответ.

dj.cowan dj.cowan
15 мар. 2020 г. 09:37:19
1

Мое предположение — это может быть связано с приоритетами...

Оба ваших действия используют одинаковый приоритет. Поэтому если функция type_custom_taxonomy вызывается первой, то тип записи action в этот момент еще не существует.

Я бы попробовал так:

function action_post_type() {
  register_post_type( 'action',
    array(
      'labels' => array(
        'name' => __( 'Actions' ),
        'singular_name' => __( 'Action' )
      ),
      'public' => true,
      'has_archive' => true,
      'show_in_rest'       => true,
      'supports'     => array('title', 'editor','thumbnail'),
    )
  );

  $labels = array(
    'name' => _x( 'Types', 'taxonomy general name' ),
    'singular_name' => _x( 'Type', 'taxonomy singular name' ),
    'menu_name' => __( 'Types' ),
  );    

  register_taxonomy('types',array('action'), array(
    'labels' => $labels,
    'hierarchical'               => true,
    'public'                     => true,
    'show_ui'                    => true,
    'show_admin_column'          => true,
    'show_in_rest'               => true,
    'show_tagcloud'              => false,
  ));
}
add_action( 'init', 'action_post_type' );

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

6 мар. 2019 г. 19:54:07
Комментарии

спасибо за ваш ответ. Я попробовал это, но это не решило проблему.

Hanane Hanane
6 мар. 2019 г. 20:01:53
3

Вы добавили термин в таксономию "Типы"?
Я думаю, что с кодом всё в порядке. Добавьте "Тип", нажав на ссылку, показанную на скриншоте 'добавить новую категорию'. После того, как вы добавите несколько "Типов", вы сможете их выбирать.

6 мар. 2019 г. 20:13:38
Комментарии

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

Hanane Hanane
8 мар. 2019 г. 16:29:59

Я проверил ваш код в своей среде, и он работает без проблем. Смотрите здесь. Возможно, какая-то другая часть вашего кода вызывает эту проблему.

Qaisar Feroz Qaisar Feroz
8 мар. 2019 г. 19:53:32

Да, это работает, если вы не используете Гутенберг. Но когда я добавляю 'show_in_rest' => true к своему CPT, чтобы получить редактор Гутенберг, это перестает работать. В этом и проблема

Hanane Hanane
9 мар. 2019 г. 11:08:38
1

Я могу воспроизвести ту же проблему.

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

Проблема в пустом ответе Rest-API. На чистой установке этого не происходит.

Пройдитесь (на локальном экземпляре) по вашим плагинам, отключайте их по одному. Проверяйте http://domain.test/wp-json/wp/v2/taxonomyname в отдельном окне, чтобы увидеть, влияет ли это на вывод.

В моем случае проблему вызвал плагин "User Access Manager" с настройкой по умолчанию "Taxonomies settings" → "Hide empty Taxonomies" установленной в "Да"!

В этом случае выберите вашу таксономию в разделе "Object type" и установите опцию в "Нет".

9 окт. 2019 г. 17:09:55
Комментарии

В случае проблемы с UAM: https://wordpress.org/support/topic/hide-empty-taxonomy-option-is-breaking-gutenberg-tabs/

Alchem Alchem
9 окт. 2019 г. 17:15:00