Cómo mostrar un meta box personalizado en la pantalla de "Edición rápida"

26 oct 2010, 17:36:00
Vistas: 17.9K
Votos: 23

He usado add_meta_box() para añadir un meta box personalizado a la ventana de edición de WordPress tanto en páginas como en entradas.

¿Cómo puedo hacer que este meta box también aparezca en la pantalla de "Edición rápida"?

Idealmente, me gustaría que apareciera justo a la derecha del selector de Categorías.

1
Comentarios

También he respondido esto con una forma más sencilla de hacerlo en esta publicación aquí http://wordpress.stackexchange.com/questions/7291/quick-edit-screen-customization#8098

jaredwilli jaredwilli
30 ene 2011 13:12:37
Todas las respuestas a la pregunta 2
3
22

Parece que no hay una manera fácil de hacer esto, debes agregar todo el código tú mismo. inline_edit_row(), la función que dibuja las pantallas de Edición rápida y Edición masiva, parece tener solo una acción en la que puedes engancharte: quick_edit_custom_box o bulk_edit_custom_box. Se llama para todas las columnas no principales que wp_manage_posts_columns() devuelve. Hay algunos filtros que puedes usar para agregar una columna, por ejemplo manage_posts_columns. Desafortunadamente, esta función define los encabezados de columna de la tabla de entradas, por lo que deberías eliminarla nuevamente antes de que print_column_headers() los imprima. Esto se puede hacer en la función get_column_headers(), con el filtro manage_[screen_id]_headers. edit-post es el ID de pantalla para la pantalla de Edición de entradas.

En conjunto, esto da un truco como el siguiente para agregar algún código. Descubrir dónde puedes manejar el envío del formulario es (actualmente) un ejercicio que dejamos al lector.

// Agrega una columna dummy para el tipo de entrada `posts`    
add_filter('manage_posts_columns', 'add_dummy_column', 10, 2);
function add_dummy_column($posts_columns, $post_type)
{
    $posts_columns['dummy'] = 'Columna dummy';
    return $posts_columns;
}
// Pero elimínala nuevamente en la pantalla de edición (¿otras pantallas también?)
add_filter('manage_edit-post_columns', 'remove_dummy_column');
function remove_dummy_column($posts_columns)
{
    unset($posts_columns['dummy']);
    return $posts_columns;
}

// Agrega nuestro texto al cuadro de edición rápida
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 'Contenido extra en el cuadro de edición rápida';
    }
}

// Agrega nuestro texto al cuadro de edición masiva
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 'Contenido extra en el cuadro de edición masiva';
    }
}
26 oct 2010 21:35:31
Comentarios

Gracias Jan. Acabo de hacer una pregunta algo similar, ¿podrías ser tan amable de echarle un vistazo? 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

Acabo de darle +1. Así que no te sorprendas si obtuvo más de la mitad de los puntos de reputación de la pregunta. Buen comentario de Scott :)

kaiser kaiser
30 mar 2011 15:22:32

Muy útil, Jan. Pregunta de seguimiento: ¿cómo se accede a los datos del post actual dentro de on_bulk_edit_custom_box para precargar los campos? global $post no parece funcionar.

Geert Geert
19 oct 2011 10:28:01
1

Las respuestas anteriores no proporcionan un medio definitivo para guardar datos. El siguiente código proviene de un sistema de producción que utiliza el tipo de publicación personalizada video antes de que escribiera el plugin de edición masiva de WordPress Custom Bulk/Quick Edit.

Archivo quick_edit.js

// @ref http://rachelcarden.com/2012/03/manage-wordpress-posts-using-bulk-edit-and-quick-edit/
(function($) {
    // creamos una copia de la función de edición rápida de WP
    var $wp_inline_edit = inlineEditPost.edit;
    // y luego sobrescribimos la función con nuestro propio código
    inlineEditPost.edit = function( id ) {
        // "llamamos" a la función original de edición de WP
        // no queremos dejar WordPress colgado
        $wp_inline_edit.apply( this, arguments );

        // ahora nos ocupamos de nuestro asunto

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

        if ( $post_id > 0 ) {
            // definimos la fila de edición
            var $edit_row = $( '#edit-' + $post_id );
            var $post_row = $( '#post-' + $post_id );

            // obtenemos los datos
            var $additional_copies = $( '.column-additional_copies', $post_row ).html();
            var $main_credits      = $( '.column-main_credits', $post_row ).html();

            // poblamos los datos
            $( ':input[name="additional_copies"]', $edit_row ).val( $additional_copies );
            $( ':input[name="main_credits"]', $edit_row ).val( $main_credits );
        }
    };

    $( '#bulk_edit' ).live( 'click', function() {
        // definimos la fila de edición masiva
        var $bulk_row = $( '#bulk-edit' );

        // obtenemos los IDs de posts seleccionados que se están editando
        var $post_ids = new Array();
        $bulk_row.find( '#bulk-titles' ).children().each( function() {
            $post_ids.push( $( this ).attr( 'id' ).replace( /^(ttle)/i, '' ) );
        });

        // obtenemos los datos
        var $additional_copies = $bulk_row.find( 'textarea[name="additional_copies"]' ).val();
        var $main_credits      = $bulk_row.find( 'textarea[name="main_credits"]' ).val();

        // guardamos los datos
        $.ajax({
            url: ajaxurl, // esta es una variable que WordPress ya ha definido para nosotros
            type: 'POST',
            async: false,
            cache: false,
            data: {
                action: 'save_bulk_edit_video', // este es el nombre de nuestra función WP AJAX que configuraremos después
                post_ids: $post_ids, // y estos son los 2 parámetros que pasamos a nuestra función
                additional_copies: $additional_copies,
                main_credits: $main_credits
            }
        });
    });
})(jQuery);

Archivo video-quick-edit.php

<?php
/**
 *  Ayudante de Edición Rápida y Masiva para registros de video de 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">Copias Adicionales</span>
            <textarea cols="22" rows="1" name="additional_copies" autocomplete="off"></textarea>
            <?php
        break;
    case 'main_credits':
?>
            <span class="title">Créditos Principales</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 hacer $slug estático
    $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';
    // cargar solo cuando se edita 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
Comentarios

Sobre el plugin, solo una nota para otros: los metadatos de los tipos de entradas personalizadas no forman parte de la versión gratuita

Fanky Fanky
10 ene 2025 12:42:31