"त्वरित संपादन" स्क्रीन पर एक कस्टम मेटा बॉक्स कैसे दिखाया जाए?


22

मैंने पृष्ठ और पोस्ट दोनों पर वर्डप्रेस एडिट विंडो में एक कस्टम मेटा बॉक्स जोड़ने के लिए add_meta_box () का उपयोग किया है।

मैं इस मेटा बॉक्स को "क्विक एडिट" स्क्रीन पर कैसे दिखा सकता हूं?

आदर्श रूप में, मुझे यह पसंद आएगा कि श्रेणियाँ चयनकर्ता के दाईं ओर दिखाई दें।


मैं भी इस पोस्ट पर यह यहाँ करने के लिए एक और अधिक आसान तरीका के साथ इस का जवाब दे दिया 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';
    }
}

धन्यवाद जन। मैंने अभी कुछ इसी तरह का प्रश्न पूछा है यदि आप इसे जांचने के लिए पर्याप्त होंगे: wordpress.stackexchange.com/questions/3531/…
स्कॉट बी

मैंने इसे + 1ed किया। तो आश्चर्य नहीं है कि यह Q के प्रतिनिधि बिंदुओं के आधे से अधिक अंक मिला। स्काउट से अच्छी टिप्पणी :)
केसर

बहुत ही उपयोगी, जनवरी। अनुवर्ती प्रश्न: on_bulk_edit_custom_boxखेतों को तैयार करने के लिए आपको वर्तमान पोस्ट के डेटा तक कैसे पहुँच प्राप्त होगी ? global $postकाम करने के लिए प्रतीत नहीं होता है।
गीर्ट

-1

उपरोक्त उत्तर डेटा को बचाने के लिए एक निश्चित साधन प्रदान नहीं करते हैं। videoवर्डप्रेस बल्क एडिट प्लगइन कस्टम बल्क / क्विक एडिट को लिखने से पहले कस्टम कोड प्रकार का उपयोग करके निम्नलिखित कोड एक उत्पादन प्रणाली से बाहर आता है ।

फ़ाइल 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();
}


?>
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.