UI de taxonomia hierárquica

11

Eu não gosto da maneira como as taxonomias são exibidas no administrador do Wordpress e queria saber se alguém sabia a melhor maneira de conectar e alterá-lo. Atualmente, se eu selecionar alguns termos na minha postagem, esses termos selecionados vão para o topo da lista e a hierarquia é quebrada, tornando-o visualmente confuso para o usuário.

Por favor, veja estas imagens para ter uma idéia do que estou falando

insira a descrição da imagem aqui insira a descrição da imagem aqui

Desejo exibir as taxonomias exatamente como elas são exibidas inicialmente com apenas os termos corretos marcados. Existe uma maneira de fazer isso sem ter que editar diretamente o núcleo do Wordpress, não consigo ver nenhum gancho para eu usar.

Obrigado por qualquer ajuda que você pode dar!

Helen

FlimFlam
fonte
1
Isso acontece com todas as taxonomias heirárquicas, é extremamente irritante!
Tom J Nowell
Boa pergunta. +1.
Anh Tran

Respostas:

7

Existe um plugin do Scribu chamado Category Checklist Tree que desativa esse "recurso".

Emzo
fonte
Brilhante, parece exatamente a solução que eu precisava!
FlimFlam
2

Backtrace

Vamos primeiro verificar onde isso realmente acontece:

A caixa de meta é adicionado em post.phpe post-new.phptelas.

# 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 ));

Em seguida, movemos um arquivo para o núcleo para chegar à definição / retorno de chamada da meta box

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

A categorychecklistguia é a que contém a lista. Dentro do div, temos uma função chamada 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>

»Conclusão:

Isso significa que não temos uma chance real de interceptar isso no nível do servidor comum com filtros / ganchos WP e PHP.

Fazendo algo como ...

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

... simplesmente desabilitaria as caixas marcadas completamente.

será atualizado se eu tiver mais informações e (talvez uma solução)

kaiser
fonte