Come mostrare un meta box personalizzato nella schermata "Modifica rapida"?
Ho utilizzato add_meta_box() per aggiungere un meta box personalizzato alla finestra di modifica di WordPress sia per le pagine che per gli articoli.
Come posso fare in modo che questo meta box appaia anche nella schermata "Modifica rapida"?
Idealmente, vorrei che apparisse proprio a destra del selettore delle categorie.

Sembra non esserci un modo semplice per farlo, devi aggiungere tutto il codice manualmente. inline_edit_row()
, la funzione che disegna le schermate di Modifica Rapida e Modifica Massiva, sembra avere solo un'azione a cui puoi agganciarti: quick_edit_custom_box
o bulk_edit_custom_box
. Viene chiamata per tutte le colonne non-core che wp_manage_posts_columns()
restituisce. Ci sono alcuni filtri che puoi usare per aggiungere una colonna, ad esempio manage_posts_columns
. Sfortunatamente, questa funzione definisce gli header delle colonne della tabella degli articoli, quindi dovresti rimuoverla nuovamente prima che print_column_headers()
li stampi. Questo può essere fatto nella funzione get_column_headers()
, con il filtro manage_[screen_id]_headers
. edit-post
è l'ID dello schermo per la pagina di Modifica Articoli.
Mettendo tutto insieme, si ottiene un hack come il seguente per aggiungere del codice. Scoprire dove puoi gestire l'invio del form è (attualmente) lasciato come esercizio al lettore.
// Aggiunge una colonna dummy per il post type `posts`
add_filter('manage_posts_columns', 'add_dummy_column', 10, 2);
function add_dummy_column($posts_columns, $post_type)
{
$posts_columns['dummy'] = 'Colonna dummy';
return $posts_columns;
}
// Ma la rimuove nuovamente nella schermata di modifica (e altre schermate?)
add_filter('manage_edit-post_columns', 'remove_dummy_column');
function remove_dummy_column($posts_columns)
{
unset($posts_columns['dummy']);
return $posts_columns;
}
// Aggiunge il nostro testo alla box di modifica rapida
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 'Contenuto extra nella box di modifica rapida';
}
}
// Aggiunge il nostro testo alla box di modifica massiva
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 'Contenuto extra nella box di modifica massiva';
}
}

Grazie Jan. Ho appena fatto una domanda piuttosto simile, se avessi la gentilezza di darle un'occhiata:http://wordpress.stackexchange.com/questions/3531/how-can-i-add-columns-to-the-post-edit-listing-to-show-my-custom-post-data

ho appena dato +1. Quindi non stupirti se ha ottenuto più della metà dei punti rep della domanda. Bel commento da parte di scott :)

Le risposte sopra non forniscono un mezzo definitivo per salvare i dati. Il seguente codice proviene da un sistema di produzione che utilizza il tipo di post personalizzato video
prima che scrivessi il plugin WordPress per la modifica in blocco Custom Bulk/Quick Edit.
File quick_edit.js
// @ref http://rachelcarden.com/2012/03/manage-wordpress-posts-using-bulk-edit-and-quick-edit/
(function($) {
// creiamo una copia della funzione di modifica inline di WordPress
var $wp_inline_edit = inlineEditPost.edit;
// e poi sovrascriviamo la funzione con il nostro codice
inlineEditPost.edit = function( id ) {
// "chiamiamo" la funzione originale di modifica di WordPress
// non vogliamo lasciare WordPress in sospeso
$wp_inline_edit.apply( this, arguments );
// ora ci occupiamo delle nostre operazioni
// otteniamo l'ID del post
var $post_id = 0;
if ( typeof( id ) == 'object' )
$post_id = parseInt( this.getId( id ) );
if ( $post_id > 0 ) {
// definiamo la riga di modifica
var $edit_row = $( '#edit-' + $post_id );
var $post_row = $( '#post-' + $post_id );
// otteniamo i dati
var $additional_copies = $( '.column-additional_copies', $post_row ).html();
var $main_credits = $( '.column-main_credits', $post_row ).html();
// popoliamo i dati
$( ':input[name="additional_copies"]', $edit_row ).val( $additional_copies );
$( ':input[name="main_credits"]', $edit_row ).val( $main_credits );
}
};
$( '#bulk_edit' ).live( 'click', function() {
// definiamo la riga di modifica in blocco
var $bulk_row = $( '#bulk-edit' );
// otteniamo gli ID dei post selezionati che vengono modificati
var $post_ids = new Array();
$bulk_row.find( '#bulk-titles' ).children().each( function() {
$post_ids.push( $( this ).attr( 'id' ).replace( /^(ttle)/i, '' ) );
});
// otteniamo i dati
var $additional_copies = $bulk_row.find( 'textarea[name="additional_copies"]' ).val();
var $main_credits = $bulk_row.find( 'textarea[name="main_credits"]' ).val();
// salviamo i dati
$.ajax({
url: ajaxurl, // questa è una variabile già definita da WordPress per noi
type: 'POST',
async: false,
cache: false,
data: {
action: 'save_bulk_edit_video', // questo è il nome della nostra funzione AJAX di WordPress che configureremo dopo
post_ids: $post_ids, // e questi sono i 2 parametri che passiamo alla nostra funzione
additional_copies: $additional_copies,
main_credits: $main_credits
}
});
});
})(jQuery);
File video-quick-edit.php
<?php
/**
* Helper per la modifica rapida e in blocco dei record video di 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">Copie Aggiuntive</span>
<textarea cols="22" rows="1" name="additional_copies" autocomplete="off"></textarea>
<?php
break;
case 'main_credits':
?>
<span class="title">Crediti Principali</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 rendere $slug statico
$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';
// carica solo quando si modifica 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();
}
?>
