Làm cách nào để hiển thị một hộp meta tùy chỉnh trên màn hình Chỉnh sửa nhanh của Jazz?


22

Tôi đã sử dụng add_meta_box () để thêm hộp meta tùy chỉnh vào cửa sổ chỉnh sửa WordPress trên cả trang và bài đăng.

Làm cách nào tôi có thể làm cho hộp meta này cũng hiển thị trên màn hình "Chỉnh sửa nhanh"?

Lý tưởng nhất, tôi muốn nó xuất hiện ngay bên phải của bộ chọn Danh mục.


Tôi cũng đã trả lời điều này bằng một cách đơn giản hơn để làm điều đó trên bài đăng này tại đây wordpress.stackexchange.com/questions/7291/ chủ
jaredwilli

Câu trả lời:


22

Dường như không có cách nào dễ dàng để làm điều này, bạn phải tự thêm tất cả mã. inline_edit_row(), chức năng vẽ màn hình Chỉnh sửa nhanh và Chỉnh sửa hàng loạt, dường như chỉ có một hành động mà bạn có thể nối vào: quick_edit_custom_boxhoặcbulk_edit_custom_box . Nó được gọi cho tất cả các cột không cốt lõi wp_manage_posts_columns()trả về. Có một số bộ lọc bạn có thể sử dụng để thêm một cột chẳng hạn manage_posts_columns. Thật không may, hàm này xác định các tiêu đề cột của bảng bài viết, vì vậy bạn nên xóa nó một lần nữa trước khi print_column_headers()in chúng. Điều này có thể được thực hiện trong get_column_headers()chức năng, với các manage_[screen_id]_headersbộ lọc . edit-postlà id màn hình cho màn hình Chỉnh sửa bài viết.

Tất cả cùng nhau, điều này cung cấp một hack như sau để thêm một số mã. Tìm ra nơi bạn có thể xử lý việc gửi biểu mẫu (hiện tại) là một bài tập cho người đọc.

// Add a dummy column for the `posts` post type    
add_filter('manage_posts_columns', 'add_dummy_column', 10, 2);
function add_dummy_column($posts_columns, $post_type)
{
    $posts_columns['dummy'] = 'Dummy column';
    return $posts_columns;
}
// But remove it again on the edit screen (other screens to?)
add_filter('manage_edit-post_columns', 'remove_dummy_column');
function remove_dummy_column($posts_columns)
{
    unset($posts_columns['dummy']);
    return $posts_columns;
}

// Add our text to the quick edit box
add_action('quick_edit_custom_box', 'on_quick_edit_custom_box', 10, 2);
function on_quick_edit_custom_box($column_name, $post_type)
{
    if ('dummy' == $column_name) {
        echo 'Extra content in the quick edit box';
    }
}

// Add our text to the bulk edit box
add_action('bulk_edit_custom_box', 'on_bulk_edit_custom_box', 10, 2);
function on_bulk_edit_custom_box($column_name, $post_type)
{
    if ('dummy' == $column_name) {
        echo 'Extra content in the bulk edit box';
    }
}

Cảm ơn Tháng Một Tôi vừa hỏi một câu hỏi tương tự như nếu bạn muốn được loại, đủ để kiểm tra xem nó ra: wordpress.stackexchange.com/questions/3531/...
Scott B

tôi chỉ +1 nó. Vì vậy, đừng tự hỏi nó có nhiều hơn một nửa số điểm đại diện của Q. Nhận xét hay từ scott :)
kaiser

Rất hữu ích, câu hỏi tiếp theo vào tháng 1: làm thế nào để bạn có quyền truy cập vào dữ liệu của bài đăng hiện tại bên on_bulk_edit_custom_boxtrong để chuẩn bị trước các trường? global $postdường như không hoạt động.
Geert

-1

Các câu trả lời trên không cung cấp một phương tiện xác định để lưu dữ liệu. Đoạn mã sau xuất phát từ một hệ thống sản xuất sử dụng videoloại bài đăng tùy chỉnh trước khi tôi viết plugin chỉnh sửa hàng loạt WordPress Tùy chỉnh hàng loạt / Chỉnh sửa nhanh .

Tập tin quick_edit.js

// @ref http://rachelcarden.com/2012/03/manage-wordpress-posts-using-bulk-edit-and-quick-edit/
(function($) {
    // we create a copy of the WP inline edit post function
    var $wp_inline_edit = inlineEditPost.edit;
    // and then we overwrite the function with our own code
    inlineEditPost.edit = function( id ) {
        // "call" the original WP edit function
        // we don't want to leave WordPress hanging
        $wp_inline_edit.apply( this, arguments );

        // now we take care of our business

        // get the post ID
        var $post_id = 0;
        if ( typeof( id ) == 'object' )
            $post_id = parseInt( this.getId( id ) );

        if ( $post_id > 0 ) {
            // define the edit row
            var $edit_row = $( '#edit-' + $post_id );
            var $post_row = $( '#post-' + $post_id );

            // get the data
            var $additional_copies = $( '.column-additional_copies', $post_row ).html();
            var $main_credits      = $( '.column-main_credits', $post_row ).html();

            // populate the data
            $( ':input[name="additional_copies"]', $edit_row ).val( $additional_copies );
            $( ':input[name="main_credits"]', $edit_row ).val( $main_credits );
        }
    };

    $( '#bulk_edit' ).live( 'click', function() {
        // define the bulk edit row
        var $bulk_row = $( '#bulk-edit' );

        // get the selected post ids that are being edited
        var $post_ids = new Array();
        $bulk_row.find( '#bulk-titles' ).children().each( function() {
            $post_ids.push( $( this ).attr( 'id' ).replace( /^(ttle)/i, '' ) );
        });

        // get the data
        var $additional_copies = $bulk_row.find( 'textarea[name="additional_copies"]' ).val();
        var $main_credits      = $bulk_row.find( 'textarea[name="main_credits"]' ).val();

        // save the data
        $.ajax({
            url: ajaxurl, // this is a variable that WordPress has already defined for us
            type: 'POST',
            async: false,
            cache: false,
            data: {
                action: 'save_bulk_edit_video', // this is the name of our WP AJAX function that we'll set up next
                post_ids: $post_ids, // and these are the 2 parameters we're passing to our function
                additional_copies: $additional_copies,
                main_credits: $main_credits
            }
        });
    });
})(jQuery);

Tập tin video-quick-edit.php

<?php
/**
 *  Quick Edit and Bulk Edit helper for Media Burn video records
 *
 *  @author Michael Cannon <mc@aihr.us>
 *  @ref http://rachelcarden.com/2012/03/manage-wordpress-posts-using-bulk-edit-and-quick-edit/
 */

add_action( 'bulk_edit_custom_box', 'quick_edit_custom_box_video', 10, 2 );
add_action( 'quick_edit_custom_box', 'quick_edit_custom_box_video', 10, 2 );

function quick_edit_custom_box_video( $column_name, $post_type ) {
    $slug = 'video';
    if ( $slug !== $post_type )
        return;

    if ( ! in_array( $column_name, array( 'additional_copies', 'main_credits' ) ) )
        return;

    static $printNonce = true;
    if ( $printNonce ) {
        $printNonce = false;
        wp_nonce_field( plugin_basename( __FILE__ ), 'video_edit_nonce' );
    }

?>
    <fieldset class="inline-edit-col-right inline-edit-video">
      <div class="inline-edit-col inline-edit-<?php echo $column_name ?>">
        <label class="inline-edit-group">
        <?php
    switch ( $column_name ) {
    case 'additional_copies':
?>
            <span class="title">Additional Copies</span>
            <textarea cols="22" rows="1" name="additional_copies" autocomplete="off"></textarea>
            <?php
        break;
    case 'main_credits':
?>
            <span class="title">Main Credits</span>
            <textarea cols="22" rows="1" name="main_credits" autocomplete="off"></textarea>
            <?php
        break;
    }
?>
        </label>
      </div>
    </fieldset>
    <?php
}


add_action( 'save_post', 'save_video_meta' );

function save_video_meta( $post_id ) {
    // TODO make $slug static
    $slug = 'video';
    if ( $slug !== $_POST['post_type'] )
        return;

    if ( !current_user_can( 'edit_post', $post_id ) )
        return;

    if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE )
        return;

    if ( isset( $post->post_type ) && 'revision' == $post->post_type )
        return;

    $_POST += array( "{$slug}_edit_nonce" => '' );
    if ( !wp_verify_nonce( $_POST["{$slug}_edit_nonce"], plugin_basename( __FILE__ ) ) )
        return;

    if ( isset( $_REQUEST['additional_copies'] ) )
        update_post_meta( $post_id, 'additional_copies', wp_kses_post( $_REQUEST['additional_copies'] ) );

    if ( isset( $_REQUEST['main_credits'] ) )
        update_post_meta( $post_id, 'main_credits', wp_kses_post( $_REQUEST['main_credits'] ) );
}


add_action( 'admin_print_scripts-edit.php', 'admin_edit_video_foot' );
function admin_edit_video_foot() {
    $slug = 'video';
    // load only when editing a video
    if ( ( isset( $_GET['page'] ) && $slug == $_GET['page'] )
        || ( isset( $_GET['post_type'] ) && $slug == $_GET['post_type'] ) ) {
        wp_enqueue_script( 'admin-quick-edit-video', get_template_directory_uri() . '/functions/user/custom/fitv/quick_edit.js', array( 'jquery', 'inline-edit-post' ), '', true );
    }
}


add_action( 'wp_ajax_save_bulk_edit_video', 'save_bulk_edit_video' );
function save_bulk_edit_video() {
    $post_ids          = ( ! empty( $_POST[ 'post_ids' ] ) ) ? $_POST[ 'post_ids' ] : array();
    $additional_copies = ( ! empty( $_POST[ 'additional_copies' ] ) ) ? wp_kses_post( $_POST[ 'additional_copies' ] ) : null;
    $main_credits      = ( ! empty( $_POST[ 'main_credits' ] ) ) ? wp_kses_post( $_POST[ 'main_credits' ] ) : null;

    if ( ! empty( $post_ids ) && is_array( $post_ids ) ) {
        foreach ( $post_ids as $post_id ) {
            update_post_meta( $post_id, 'additional_copies', $additional_copies );
            update_post_meta( $post_id, 'main_credits', $main_credits );
        }
    }

    die();
}


?>
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.