Thêm 'Mô tả' vào phân loại 'Chỉnh sửa nhanh'


7

Điều này có vẻ khá đơn giản, nhưng tôi không thể tìm thấy một hướng dẫn xác định về cách thêm trường mô tả phân loại vào hộp chỉnh sửa nhanh.

Tôi đã làm theo một số hướng dẫn về cách thêm các trường vào hộp chỉnh sửa nhanh tùy chỉnh, nhưng các trường cốt lõi (tên, mô tả và sên) không tuân theo các hướng dẫn tương tự như thêm các trường tùy chỉnh vào hộp chỉnh sửa nhanh phân loại.

Nó thậm chí có thể làm như vậy? Nếu không - tôi đoán cách thay thế tốt nhất là tạo một trường meta 'Mô tả' khác và theo cách đó thêm nó vào hộp chỉnh sửa nhanh phân loại.

Câu trả lời:


15

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:

  1. Đặ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")
  2. Buộc cột bị ẩn hoạt động trên get_user_option_manageedit-{$taxonomy}columnshiddenmó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+.

Thêm mô tả để phân loại nhanh chỉnh sửa


1
Này GM! Cám ơn vì đã giải thích. Điều này thật tuyệt vời và tôi sẽ không thể làm điều này nếu nó không phải là sự giúp đỡ của bạn. Nhiều đánh giá cao. Khi 'mô tả' được lưu trong hộp Chỉnh sửa nhanh, nếu bạn truy cập lại chỉnh sửa nhanh - văn bản cũ vẫn hiển thị và js tùy chỉnh mà tôi đã viết không còn chạy nữa. Tôi biết điều này là do AJAX, nhưng tôi không chắc cách tải lại tập lệnh bên trong hàm thứ 2. Bất kỳ mẹo về cách tải lại tập lệnh tùy chỉnh? CẢM ƠN BẠN một lần nữa btw.
Roc

@Roc Vấn đề là WordPress sao chép qua javascript biểu mẫu chỉnh sửa, vì vậy khi tôi đặt giá trị hiện tại thành textarea, biểu mẫu tôi đang tìm kiếm không còn tồn tại nữa .. Vì vậy, tôi phải chạy hành động không chỉ trên tài liệu sẵn sàng , nhưng trên mỗi lần nhấp, sử dụng jQuery.on()để làm cho nó hoạt động với ajax. Đã chỉnh sửa câu trả lời (chỉ javascript), bây giờ nó hoạt động.
gmazzap

0

Chỉ muốn chỉ ra rằng tôi không thể làm cho mã hoạt động mà không thay đổi tham số 'danh mục' thành tên phân loại tùy chỉnh của tôi.

Ví dụ:

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

đã được thay thế bằng:

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

Chúc mừng!

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.