我扩展了WP\\u List\\u Table类,创建了一个自定义的帖子排序表,以及一个带有自定义元框的快速编辑框。
元框填充并保存,但当我单击“提交”时,字段值消失,甚至没有包含在我的类中的默认值(cb、title、tags、cats等)被添加回保存的列。这会忽略页面上的其他列。刷新页面时,将返回保存的自定义字段值。
它与提交时一样,缺少$post\\u对象。
我正在使用一个被黑掉的get\\u inline\\u data函数,它在我的快速编辑表单中包含meta\\u值,而不是在我的类中调用get\\u inline\\u data。
元框的我的保存功能:
add_action( \'save_post\', \'save_inline_edit_meta\' );
function save_inline_edit_meta( $post_id ) {
global $pagenow;
if ( $pagenow == \'admin.php\' ) {
if ( isset( $_POST[ \'is_quickedit\' ] ) && isset( $_POST[ \'standinghead\' ] ) )
update_post_meta( $post_id, \'_wnd_standing_head\', $_POST[ \'standinghead\' ] );
if ( isset( $_POST[ \'is_quickedit\' ] ) && isset( $_POST[ \'headline\' ] ) )
update_post_meta( $post_id, \'_wnd_alt_title\', $_POST[ \'headline\' ] );
if ( isset( $_POST[ \'is_quickedit\' ] ) && isset( $_POST[ \'deck\' ] ) )
update_post_meta( $post_id, \'_wnd_deck\', $_POST[ \'deck\' ] );
}
return $post_id;
}
我的Javascript保存功能:
save : function(id) {
var params, fields, page = $(\'.post_status_page\').val() || \'\';
if ( typeof(id) == \'object\' )
id = this.getId(id);
$(\'table.widefat .inline-edit-save .waiting\').show();
params = {
action: \'inline-save\',
post_ID: id,
post_type: \'post\',
edit_date: \'true\',
post_status: page
};
fields = $(\'#edit-\'+id+\' :input\').serialize();
params = fields + \'&\' + $.param(params);
$.post(\'admin-ajax.php\', params,
function(r) {
$(\'table.widefat .inline-edit-save .waiting\').hide();
if (r) {
if ( -1 != r.indexOf(\'<tr\') ) {
$(inlineEditPost.what+id).remove();
$(\'#edit-\'+id).before(r).remove();
$(inlineEditPost.what+id).hide().fadeIn();
} else {
r = r.replace( /<.[^<>]*?>/g, \'\' );
$(\'#edit-\'+id+\' .inline-edit-save .error\').html(r).show();
}
} else {
$(\'#edit-\'+id+\' .inline-edit-save .error\').html(inlineEditL10n.error).show();
}
}
, \'html\');
return false;
},
SO网友:brasofilo
我只是在向默认帖子类型添加额外列时遇到了相同的错误。
令人不快的是$pagenow
检查
快速编辑使用admin-ajax.php
因此,完成后它不会呈现自定义列。
这不起作用:
if( \'edit.php\' == $pagenow && is_admin() )
{
add_action( \'admin_init\', array( $this, \'init_id_column\' ), 999 );
add_action( \'admin_init\', array( $this, \'init_thumb_column\' ), 999 );
}
但这确实:
if(
( \'edit.php\' == $pagenow && is_admin() )
or
( \'admin-ajax.php\' == $pagenow && \'inline-save\' == $_POST[\'action\'] && \'list\' == $_POST[\'post_view\'] )
)
{
add_action( \'admin_init\', array( $this, \'init_id_column\' ), 999 );
add_action( \'admin_init\', array( $this, \'init_thumb_column\' ), 999 );
}
我不确定这是不是最好的检查方法,不过。。。
相关的track ticket.