Добавить "Описание" в таксономию "Быстрое редактирование"
Это кажется довольно простым, но я не могу найти определенного руководства о том, как добавить поле описания таксономии в поле быстрого редактирования.
Я следовал нескольким руководствам по добавлению полей в пользовательское поле быстрого редактирования, но основные поля (имя, описание и слаг) не соответствуют тем же рекомендациям, что и добавление пользовательских полей в поле быстрого редактирования таксономии.
Возможно ли вообще это сделать? Если нет - я думаю, что лучшая альтернатива - создать другую Мета-поле "Описание" и таким образом добавьте его в поле быстрого редактирования таксономии.
2 answers
Обычно для добавления полей в поле быстрого редактирования мы должны использовать 'quick_edit_custom_box'
крючок действия, который запускается только для пользовательских столбцов, потому что основные столбцы явно исключены ( см. Код).
Если мы добавим пользовательский столбец, то он будет показан в таблице списка, но это не имеет смысла, потому что описание столбца уже присутствует.
Однако у нас есть возможность добавить невидимый столбец, используя 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+.
Просто хотел отметить, что я не смог заставить код работать без изменения параметра "категория" на мое пользовательское имя таксономии.
Например:
wp_update_term( $term_id, 'category', array( 'description' => $description ) );
Был заменен на:
wp_update_term( $term_id, 'my_custom_tax_name', array( 'description' => $description ) );
Ура!