Hierarchiczny interfejs systematyki

11

Nie podoba mi się sposób wyświetlania taksonomii w adminie Wordpress i zastanawiałem się, czy ktokolwiek znał najlepszy sposób, aby się podłączyć i zmienić. Obecnie, jeśli wybiorę niektóre terminy w swoim poście, te wybrane terminy przejdą na górę listy, a hierarchia zostanie złamana, co wizualnie dezorientuje użytkownika.

Zobacz te obrazy, aby dowiedzieć się, o czym mówię

wprowadź opis zdjęcia tutaj wprowadź opis zdjęcia tutaj

Chcę wyświetlić taksonomie dokładnie tak, jak są wyświetlane początkowo z zaznaczonymi prawidłowymi terminami. Czy istnieje sposób na zrobienie tego bez konieczności bezpośredniej edycji rdzenia Wordpress, nie widzę żadnych haków do użycia.

Dziękujemy za wszelką pomoc!

Helen

FlimFlam
źródło
1
Dzieje się tak ze wszystkimi hematarchicznymi taksonomiami, jest to wyjątkowo denerwujące!
Tom J Nowell
Miłe pytanie. +1.
Anh Tran,

Odpowiedzi:

2

Ślad

Sprawdźmy najpierw, gdzie to się dzieje:

Meta box zostanie dodany post.phpi post-new.phpekrany.

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

Następnie przenosimy jeden plik głębiej do rdzenia, aby dostać się do wywołania zwrotnego definicji / meta-boxu

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

Karta categorychecklistjest tą, która zawiera listę. Wewnątrz divmamy funkcję o nazwie 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>

»Wniosek:

Oznacza to, że nie mamy realnej szansy na przechwycenie tego na zwykłym poziomie serwera za pomocą filtrów / haków WP i PHP.

Robienie czegoś takiego jak ...

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

... po prostu całkowicie wyłączy zaznaczone pola.

zaktualizuje się, jeśli otrzymam więcej informacji i (być może rozwiązanie)

kajzer
źródło