如何使此元框也显示在“快速编辑”屏幕上? br />
理想情况下,我希望它显示在Categories选择器的右侧。
#1 楼
似乎没有简单的方法可以执行此操作,您必须自己添加所有代码。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]_headers
函数中完成此操作。 edit-post
是“编辑帖子”屏幕的屏幕ID。加在一起,这会产生如下所示的黑客攻击,以添加一些代码。 (目前)留给读者练习,以找出可以处理表单提交的地方。
// 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';
}
}
评论
谢谢Jan。我刚刚问了一个类似的问题,请问您是否足够友好:wordpress.stackexchange.com/questions/3531/…
–斯科特B
2010年11月1日于20:13
我刚刚+1了。因此,不要奇怪,它获得的问声仅超过Q的一半。斯科特(Scott)的评论不错:)
– kaiser
2011年3月30日12:22
一月的后续问题非常有帮助:您如何在on_bulk_edit_custom_box内访问当前帖子的数据,以便预填充字段?全局$ post似乎不起作用。
– Geert
11-10-19在7:28
#2 楼
上面的答案没有提供确定的方法来保存数据。在编写WordPress批量编辑插件“自定义批量/快速编辑”之前,下面的代码来自使用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();
}
?>
评论
我还用一种更简单的方法来回答此问题,请参见wordpress.stackexchange.com/questions/7291/…