Добавить "Описание" в таксономию "Быстрое редактирование"


Это кажется довольно простым, но я не могу найти определенного руководства о том, как добавить поле описания таксономии в поле быстрого редактирования.

Я следовал нескольким руководствам по добавлению полей в пользовательское поле быстрого редактирования, но основные поля (имя, описание и слаг) не соответствуют тем же рекомендациям, что и добавление пользовательских полей в поле быстрого редактирования таксономии.

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

Author: Nicolai, 2014-03-30

2 answers

Обычно для добавления полей в поле быстрого редактирования мы должны использовать 'quick_edit_custom_box' крючок действия, который запускается только для пользовательских столбцов, потому что основные столбцы явно исключены ( см. Код).

Если мы добавим пользовательский столбец, то он будет показан в таблице списка, но это не имеет смысла, потому что описание столбца уже присутствует.

Однако у нас есть возможность добавить невидимый столбец, используя 2 трюка:

  1. Установка своего метка к пустой строке (таким образом, она не отображается в настройках "Опция экрана")
  2. Принудительно скрыть столбец, воздействуя на get_user_option_manageedit-{$taxonomy}columnshidden крючок фильтра

Сначала создайте невидимый столбец:

/* 
 * This is NOT required, but I'm using it to easily let you customize the taxonomy
 * where to add the inline description.
 * You can replace $the_target_tax in all the code with the name of your taxonomy,
 * with no need to use the global variable.
 */
global $the_target_tax;
$the_target_tax = 'category';

add_filter( "manage_edit-{$the_target_tax}_columns", function( $columns ) {
    $columns['_description'] = '';
    return $columns;
});

add_filter( "manage_{$the_target_tax}_custom_column", function( $e, $column, $term_id ) {
    if ( $column === '_description' ) return '';
}, 10, 3 );

add_filter( "get_user_option_manageedit-{$the_target_tax}columnshidden", function( $r ) {
    $r[] = '_description';
    return $r;
});

Теперь у нас есть пользовательский столбец '_description', который невидим, но может быть использован для добавления дополнительных полей с помощью 'quick_edit_custom_box' крючка:

Однако этот крючок не передает никакого текущего значения для предварительного заполнения поля текущим описанием, но мы можем использовать несколько строк jQuery для этого это:

add_action( 'quick_edit_custom_box', function( $column, $screen, $tax ) {
    if ( $screen !== 'edit-tags' ) return;
    $taxonomy = get_taxonomy( $tax );
    if ( ! current_user_can( $taxonomy->cap->edit_terms ) ) return;
    global $the_target_tax;
    if ( $tax !== $the_target_tax || $column !== '_description' ) return;
    ?>
    <fieldset>
        <div class="inline-edit-col">
        <label>
            <span class="title"><?php _e('Description'); ?></span>
            <span class="input-text-wrap">
            <textarea id="inline-desc" name="description" rows="3" class="ptitle"></textarea>
            </span>
        </label>
        </div>
    </fieldset>
    <script>
    jQuery('#the-list').on('click', 'a.editinline', function(){
        var now = jQuery(this).closest('tr').find('td.column-description').text();
        jQuery('#inline-desc').text( now );
    });
    </script>
    <?php
}, 10, 3 );

Теперь, когда у нас есть форма, нам нужно сохранить данные при отправке, довольно легко используя "edited_{$taxonomy}" крюк:

function save_inline_description( $term_id ) {
    global $the_target_tax;
    $tax = get_taxonomy( $the_target_tax );
    if (
        current_filter() === "edited_{$the_target_tax}"
        && current_user_can( $tax->cap->edit_terms )
    ) {
        $description = filter_input( INPUT_POST, 'description', FILTER_SANITIZE_STRING );
        // removing action to avoid recursion
        remove_action( current_filter(), __FUNCTION__ );
        wp_update_term( $term_id, $the_target_tax, array( 'description' => $description ) );
    }
}
add_action( "edited_{$the_target_tax}", 'save_inline_description' );

Код был быстро протестирован и, похоже, работает, обратите внимание, что для него требуется PHP 5.3+.

Add description to taxonomy quick edit

 16
Author: gmazzap, 2017-03-22 08:12:17

Просто хотел отметить, что я не смог заставить код работать без изменения параметра "категория" на мое пользовательское имя таксономии.

Например:

wp_update_term( $term_id, 'category', array( 'description' => $description ) );

Был заменен на:

wp_update_term( $term_id, 'my_custom_tax_name', array( 'description' => $description ) );

Ура!

 0
Author: Leo, 2016-02-17 21:41:30