Thông thường để thêm các trường vào trường chỉnh sửa nhanh, chúng ta nên sử dụng 'quick_edit_custom_box'
hook hành động chỉ được kích hoạt cho các cột tùy chỉnh, vì các cột cốt lõi được loại trừ rõ ràng ( xem mã ).
Nếu chúng ta thêm một cột tùy chỉnh, thì nó sẽ được hiển thị trong bảng danh sách, nhưng nó không có ý nghĩa gì, vì mô tả cột đã có sẵn.
Tuy nhiên, chúng tôi có khả năng thêm một cột vô hình bằng 2 thủ thuật:
- Đặt nhãn của nó thành một chuỗi trống (theo cách này, nó không được hiển thị trong cài đặt "Tùy chọn màn hình")
- Buộc cột bị ẩn hoạt động trên
get_user_option_manageedit-{$taxonomy}columnshidden
móc lọc
Đầu tiên tạo cột vô hình:
/*
* 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;
});
Bây giờ chúng ta có một cột tùy chỉnh '_description'
vô hình, nhưng có thể được sử dụng để đặt các trường bổ sung thông qua 'quick_edit_custom_box'
hook:
Tuy nhiên, hook này không vượt qua bất kỳ giá trị hiện tại nào để điền trước trường với mô tả hiện tại, nhưng chúng ta có thể sử dụng một vài dòng jQuery để làm điều đó:
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 );
Bây giờ chúng ta đã có biểu mẫu, chúng ta cần lưu dữ liệu khi gửi, khá dễ dàng bằng cách sử dụng "edited_{$taxonomy}"
hook:
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' );
Mã đã nhanh chóng được kiểm tra và dường như hoạt động, lưu ý rằng nó yêu cầu PHP 5.3+.