จะแสดงกล่องเมตาที่กำหนดเองในหน้าจอ“ แก้ไขด่วน” ได้อย่างไร?


22

ฉันใช้ add_meta_box () เพื่อเพิ่มเมตาบ็อกที่กำหนดเองลงในหน้าต่างแก้ไข WordPress ในทั้งหน้าและโพสต์

ฉันจะทำให้กล่องเมตานี้แสดงบนหน้าจอ "แก้ไขด่วน" ได้อย่างไร

โดยหลักการแล้วฉันต้องการให้ปรากฏทางด้านขวาของตัวเลือกหมวดหมู่


ฉันยังได้ตอบคำถามนี้ด้วยวิธีที่ง่ายขึ้นในการโพสต์ที่นี่wordpress.stackexchange.com/questions/7291/…
jaredwilli

คำตอบ:


22

ดูเหมือนจะไม่มีวิธีง่ายๆในการทำเช่นนี้คุณต้องเพิ่มรหัสทั้งหมดด้วยตัวเอง inline_edit_row()ฟังก์ชั่นที่ดึงด่วนแก้ไขและแก้ไขหน้าจอจำนวนมากดูเหมือนว่าจะมีการดำเนินการเพียงคนเดียวที่คุณสามารถขอเป็น: หรือquick_edit_custom_box bulk_edit_custom_boxมันถูกเรียกสำหรับคอลัมน์ที่ไม่ใช่คอร์ทั้งหมดที่wp_manage_posts_columns()ส่งคืน มีตัวกรองบางตัวที่คุณสามารถใช้เพื่อเพิ่มคอลัมน์manage_posts_columnsได้ น่าเสียดายที่ฟังก์ชันนี้กำหนดส่วนหัวคอลัมน์ของตารางโพสต์ดังนั้นคุณควรลบอีกครั้งก่อนprint_column_headers()พิมพ์ ซึ่งสามารถทำได้ในget_column_headers()ฟังก์ชั่นที่มีกรอง เป็นรหัสหน้าจอสำหรับหน้าจอแก้ไขโพสต์manage_[screen_id]_headersedit-post

ทั้งหมดนี้จะให้แฮ็คดังต่อไปนี้เพื่อเพิ่มรหัส การหาตำแหน่งที่คุณสามารถจัดการกับการส่งแบบฟอร์มได้ (ซ้าย) เป็นแบบฝึกหัดให้กับผู้อ่าน

// 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';
    }
}

ขอบคุณ Jan ฉันเพิ่งถามคำถามคล้ายกันบ้างถ้าคุณใจดีพอที่จะลองดู: wordpress.stackexchange.com/questions/3531/…
Scott B

ฉันเพิ่ง +1 มัน ดังนั้นอย่าแปลกใจเลยว่ามันมีมากกว่าครึ่งหนึ่งของคะแนนตัวแทนของ Q. Nice ความคิดเห็นจากสกอตต์ :)
kaiser

มีประโยชน์มาก, ม. ค. คำถามติดตามผล: คุณจะเข้าถึงข้อมูลของโพสต์ปัจจุบันภายในon_bulk_edit_custom_boxเพื่อที่จะเติมข้อมูลฟิลด์ได้อย่างไร? global $postดูเหมือนจะไม่ทำงาน
Geert

-1

คำตอบข้างต้นไม่ได้มีวิธีการที่แน่นอนในการบันทึกข้อมูล รหัสต่อไปนี้ออกมาจากระบบการผลิตโดยใช้videoประเภทโพสต์ที่กำหนดเองก่อนที่ฉันจะเขียนปลั๊กอินแก้ไขเป็นกลุ่ม WordPress เป็นกลุ่มที่กำหนดเอง / แก้ไขด่วนแก้ไขด่วน

ไฟล์ 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);

ไฟล์ 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();
}


?>
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.