Cum să afișezi o cutie meta personalizată în ecranul "Editare rapidă" WordPress
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.

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

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

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 :)

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();
}
?>
