Cum să afișezi o cutie meta personalizată în ecranul "Editare rapidă" WordPress

26 oct. 2010, 17:36:00
Vizualizări: 17.9K
Voturi: 23

Am folosit add_meta_box() pentru a adăuga o cutie meta personalizată în fereastra de editare WordPress atât pentru pagini, cât și pentru articole.

Cum pot face ca această cutie meta să apară și în ecranul "Editare rapidă"?

În mod ideal, aș dori să apară chiar în dreapta selectorului de Categorii.

1
Comentarii

Am răspuns și eu la această întrebare cu o metodă mai simplă de a o realiza în acest post de aici http://wordpress.stackexchange.com/questions/7291/quick-edit-screen-customization#8098

jaredwilli jaredwilli
30 ian. 2011 13:12:37
Toate răspunsurile la întrebare 2
3
22

Se pare că nu există o modalitate simplă de a face acest lucru, trebuie să adaugi tot codul manual. inline_edit_row(), funcția care desenează ecranele de Editare Rapidă și Editare în Masă, pare să aibă doar o singură acțiune în care poți interveni: quick_edit_custom_box sau bulk_edit_custom_box. Aceasta este apelată pentru toate coloanele non-core pe care le returnează wp_manage_posts_columns(). Există câteva filtre pe care le poți folosi pentru a adăuga o coloană, de exemplu manage_posts_columns. Din păcate, această funcție definește antetele coloanelor din tabelul de postări, așa că ar trebui să o elimini din nou înainte ca print_column_headers() să le afișeze. Acest lucru se poate face în funcția get_column_headers(), cu filtru manage_[screen_id]_headers. edit-post este ID-ul ecranului pentru ecranul de Editare Postări.

În final, acest lucru oferă un hack precum următorul pentru a adăuga niște cod. Aflarea locului în care poți gestiona trimiterea formularului este (momentan) lăsată ca exercițiu pentru cititor.

// Adaugă o coloană dummy pentru tipul de postări `posts`    
add_filter('manage_posts_columns', 'add_dummy_column', 10, 2);
function add_dummy_column($posts_columns, $post_type)
{
    $posts_columns['dummy'] = 'Coloană dummy';
    return $posts_columns;
}
// Dar elimin-o din nou pe ecranul de editare (și pe alte ecrane?)
add_filter('manage_edit-post_columns', 'remove_dummy_column');
function remove_dummy_column($posts_columns)
{
    unset($posts_columns['dummy']);
    return $posts_columns;
}

// Adaugă textul nostru în caseta de editare rapidă
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 'Conținut suplimentar în caseta de editare rapidă';
    }
}

// Adaugă textul nostru în caseta de editare în masă
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 'Conținut suplimentar în caseta de editare în masă';
    }
}
26 oct. 2010 21:35:31
Comentarii

Mulțumesc, Jan. Tocmai am pus o întrebare oarecum similară, dacă ai bunătatea să o verifici:http://wordpress.stackexchange.com/questions/3531/how-can-i-add-columns-to-the-post-edit-listing-to-show-my-custom-post-data

Scott B Scott B
1 nov. 2010 22:13:38

tocmai i-am dat +1. Așa că nu te mira că a primit mai mult decât jumătate din punctele de reputație ale întrebării. Comentariu frumos de la scott :)

kaiser kaiser
30 mar. 2011 15:22:32

Foarte util, Jan. Întrebare de follow-up: cum poți accesa datele postării curente în interiorul funcției on_bulk_edit_custom_box pentru a preumple câmpurile? global $post nu pare să funcționeze.

Geert Geert
19 oct. 2011 10:28:01
1

Răspunsurile de mai sus nu oferă o metodă definitivă de a salva datele. Următorul cod provine dintr-un sistem de producție care utilizează tipul de postare personalizat video, înainte de a scrie plugin-ul WordPress pentru editare în masă Custom Bulk/Quick Edit.

Fișierul quick_edit.js

// @ref http://rachelcarden.com/2012/03/manage-wordpress-posts-using-bulk-edit-and-quick-edit/
(function($) {
    // creăm o copie a funcției WP de editare inline a postărilor
    var $wp_inline_edit = inlineEditPost.edit;
    // apoi suprascriem funcția cu codul nostru
    inlineEditPost.edit = function( id ) {
        // "apelăm" funcția originală de editare WP
        // nu vrem să lăsăm WordPress în aer
        $wp_inline_edit.apply( this, arguments );

        // acum ne ocupăm de treburile noastre

        // obținem ID-ul postării
        var $post_id = 0;
        if ( typeof( id ) == 'object' )
            $post_id = parseInt( this.getId( id ) );

        if ( $post_id > 0 ) {
            // definim rândul de editare
            var $edit_row = $( '#edit-' + $post_id );
            var $post_row = $( '#post-' + $post_id );

            // obținem datele
            var $additional_copies = $( '.column-additional_copies', $post_row ).html();
            var $main_credits      = $( '.column-main_credits', $post_row ).html();

            // populăm datele
            $( ':input[name="additional_copies"]', $edit_row ).val( $additional_copies );
            $( ':input[name="main_credits"]', $edit_row ).val( $main_credits );
        }
    };

    $( '#bulk_edit' ).live( 'click', function() {
        // definim rândul de editare în masă
        var $bulk_row = $( '#bulk-edit' );

        // obținem ID-urile postărilor selectate care sunt editate
        var $post_ids = new Array();
        $bulk_row.find( '#bulk-titles' ).children().each( function() {
            $post_ids.push( $( this ).attr( 'id' ).replace( /^(ttle)/i, '' ) );
        });

        // obținem datele
        var $additional_copies = $bulk_row.find( 'textarea[name="additional_copies"]' ).val();
        var $main_credits      = $bulk_row.find( 'textarea[name="main_credits"]' ).val();

        // salvăm datele
        $.ajax({
            url: ajaxurl, // aceasta este o variabilă definită deja de WordPress pentru noi
            type: 'POST',
            async: false,
            cache: false,
            data: {
                action: 'save_bulk_edit_video', // acesta este numele funcției noastre WP AJAX pe care o vom configura în continuare
                post_ids: $post_ids, // și aceștia sunt cei 2 parametri pe care îi transmitem funcției noastre
                additional_copies: $additional_copies,
                main_credits: $main_credits
            }
        });
    });
})(jQuery);

Fișierul video-quick-edit.php

<?php
/**
 *  Ajutor pentru Editare Rapidă și Editare în Masă pentru înregistrările video Media Burn
 *
 *  @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">Copii Adiționale</span>
            <textarea cols="22" rows="1" name="additional_copies" autocomplete="off"></textarea>
            <?php
        break;
    case 'main_credits':
?>
            <span class="title">Credite Principale</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 face $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';
    // încărcăm doar când edităm un 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();
}


?>
27 sept. 2013 07:19:49
Comentarii

Despre plugin, doar o notă pentru alții, meta pentru tipurile personalizate de postări nu face parte din versiunea gratuită

Fanky Fanky
10 ian. 2025 12:42:31