Иерархическая таксономия UI

11

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

Пожалуйста, смотрите эти изображения, чтобы понять, о чем я говорю

введите описание изображения здесь введите описание изображения здесь

Я хочу, чтобы таксономии отображались точно так, как они отображаются изначально, с помеченными правильными терминами. Есть ли способ сделать это без необходимости редактировать ядро ​​Wordpress напрямую, я не вижу никаких хуков для использования.

Спасибо за любую помощь, которую вы можете оказать!

Хелен

мошенничать
источник
1
Это происходит со всеми иерархическими таксономиями, это очень раздражает!
Том Дж. Новелл
Хороший вопрос +1.
Ань Чан

Ответы:

7

Существует плагин от Scribu, который называется Category Checklist Tree, который отключает эту «функцию».

Emzo
источник
Блестяще, это выглядит как раз то решение, которое мне было нужно!
FlimFlam
2

Backtrace

Давайте сначала проверим, где это на самом деле происходит:

Мета-бокс добавляется post.phpи post-new.phpэкраны.

# inside ~/wp-admin/edit-form-advanced.php
// TAGS:
if ( !is_taxonomy_hierarchical($tax_name) )
    add_meta_box('tagsdiv-' . $tax_name, $label, 'post_tags_meta_box', null, 'side', 'core', array( 'taxonomy' => $tax_name ));
// CATEGORIES:
else
    add_meta_box($tax_name . 'div', $label, 'post_categories_meta_box', null, 'side', 'core', array( 'taxonomy' => $tax_name ));

Затем мы перемещаем один файл глубже в ядро, чтобы добраться до определения / обратного вызова мета-блока

// inside ~/wp-admin/meta-boxes.php
function post_categories_meta_box( $post, $box )

Эта categorychecklistвкладка содержит список. Внутри divмы получили функцию с именем wp_popular_terms_checklist($taxonomy);.

# inside ~/wp-admin/includes/template.php
<li id="<?php echo $id; ?>" class="popular-category">
<label class="selectit">
<input id="in-<?php echo $id; ?>" type="checkbox" <?php echo $checked; ?> value="<?php echo (int) $term->term_id; ?>" <?php echo $disabled ?>/>
    <?php echo esc_html( apply_filters( 'the_category', $term->name ) ); ?>
</label>
</li>

" Вывод:

Это означает, что у нас нет реального шанса перехватить это на простом уровне сервера с помощью фильтров WP / hooks и PHP.

Делать что-то вроде ...

add_filter( 'wp_get_object_terms', '__return_empty_array', 20, 4 );

... будет просто полностью отключить флажки.

будет обновлять, если я получил больше информации и (возможно, решение)

кайзер
источник