问题描述
我拼命寻找某种方式 (任何方式) 通过 functions.php 文件设置默认的”screen options” 和 metabox 顺序。有人有任何帮助他们可以在这里提供吗?
最佳解决方案
在后期编辑页面设置元框的顺序
您将需要删除元框,并按您要的顺序再次添加它们。
要禁用元框:(根据您的需要定制,查看 html 代码中的 metabox id,以了解应该使用哪个名称作为函数的第一个参数)
function my_remove_meta_boxes() {
remove_meta_box('postcustom', 'post', 'core');
remove_meta_box('commentsdiv', 'post', 'core');
...
}
add_action( 'admin_menu', 'my_remove_meta_boxes' );
删除它们后,您可以使用 add_meta_box 功能将其添加到新位置:http://codex.wordpress.org/Function_Reference/add_meta_box 。元框的顺序取决于您调用 add_meta_box 功能的顺序。例如,使用以下代码片段,注释元框将在自定义字段元框之前。
function my_add_meta_boxes( $post_type, $post ) {
if ( ('publish' == $post->post_status || 'private' == $post->post_status) && post_type_supports($post_type, 'comments') )
add_meta_box('commentsdiv', __('Comments'), 'post_comment_meta_box', $post_type, 'normal', 'core');
if ( post_type_supports($post_type, 'custom-fields') )
add_meta_box('postcustom', __('Custom Fields'), 'post_custom_meta_box', $post_type, 'normal', 'core');
...
}
add_action( 'add_meta_boxes', 'my_add_meta_boxes' );
你可能想看看文件 wp-admin /edit-form-advanced.php
设置列标题显示在帖子列表页面上
您需要使用过滤器管理_ {$ post_type} _posts_columns 。例如,以下代码段将删除注释列。
function my_remove_columns( $posts_columns ) {
unset( $posts_columns['comments'] );
return $posts_columns;
}
add_filter( 'manage_post_posts_columns', 'my_remove_columns' );
将默认结果设置为显示在帖子列表页面上
使用过滤器’edit_{$post_type}_per_page’ 和’edit_posts_per_page’ 。
function my_edit_post_per_page( $per_page, $post_type ) {
$edit_per_page = 'edit_' . $post_type . '_per_page';
$per_page = (int) get_user_option( $edit_per_page );
if ( empty( $per_page ) || $per_page < 1 )
$per_page = 1;
return $per_page;
}
add_filter( 'edit_posts_per_page', 'my_edit_post_per_page' );
要定位特定的帖子类型:
-
使用
add_filter( 'edit_{post type}_per_page', 'my_edit_post_per_page' );
,例如add_filter( 'edit_post_per_page', 'my_edit_post_per_page' );
的帖子,add_filter( 'edit_page_per_page', 'my_edit_post_per_page' );
的页面。 -
或使用您的功能中的条件。例如。:
功能 my_edit_post_per_page($ per_page,$ post_type){
if( $post_type == 'post' ) { $edit_per_page = 'edit_' . $post_type . '_per_page'; $per_page = (int) get_user_option( $edit_per_page ); if ( empty( $per_page ) || $per_page < 1 ) $per_page = 1; } return $per_page;
次佳解决方案
在以下示例中,将 {CPT}
替换为后缀类型名称,如 post
,page
,book
,event
,imaginary
,foobar
…
add_filter( 'get_user_option_meta-box-order_{CPT}', 'metabox_order' );
function metabox_order( $order ) {
return array(
'normal' => join(
",",
array( // vvv Arrange here as you desire
'customdiv-{CPT}',
'authordiv',
'slugdiv',
)
),
);
}
笔记:
-
除了
normal
,您还可以使用side
和advanced
-
值为逗号分隔的 div ids,您可以通过查看页面源代码来获取,也可以猜到
-
存在的任何 metabox 不包括在您的自定义顺序中,将自动添加到列表的末尾。
参考文献
注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。