IU de taxonomia hierárquica

11

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

Por favor, veja estas imagens para ter uma ideia do que estou falando

Eu quero 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 o núcleo do Wordpress diretamente, não vejo nenhum gancho para eu usar.

Obrigado por qualquer ajuda que você possa dar!

Helen

    
por FlimFlam 05.09.2012 / 18:42

2 respostas

7

Existe um plugin por Scribu chamado Árvore de lista de verificação de categorias que desativa este" recurso ".

    
por Emzo 11.09.2012 / 20:57
2

Backtrace

Vamos primeiro verificar onde isso realmente acontece:

A meta box é adicionada às telas post.php e 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 ));

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

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

A guia categorychecklist é a que manté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 lado do servidor simples com filtros / ganchos do WP e PHP.

Fazendo algo como ...

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

... simplesmente desabilitaria completamente as caixas marcadas.

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

    
por kaiser 05.09.2012 / 22:09