我正在拼命地寻找某种方式(通过任何方式)来通过functions.php文件设置默认的“屏幕选项”和metabox顺序。有没有人可以在这里提供任何帮助?

评论

2014年更新:对于只需要重新排序元框的人,请参阅下面的Nabil答案。

#1 楼

设置后编辑页面上的meta框的顺序

您将需要删除meta框,然后按照所需的顺序再次添加它们。

要禁用meta框: (根据您的需要进行定制,请查看html代码中的metabox ID,以了解应使用哪个名称作为函数的第一个参数)。

您可以使用add_meta_box函数将其添加到新位置:http://codex.wordpress.org/Function_Reference/add_meta_box。元框的顺序取决于调用add_meta_box函数的顺序。例如:使用以下代码段,注释元框将位于自定义字段元框之前。

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' );


您可能要查看文件wp-admin / edit-form-advanced.php

设置哪些列标题显示在帖子列表页面上

您需要使用过滤器manage _ {$ post_type} _posts_columns。例如:以下代码段将删除注释列。

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' );


设置要显示在帖子列表页面上的默认结果

使用过滤“ edit _ {$ post_type} _per_page”和“ edit_posts_per_page”。

function my_remove_columns( $posts_columns ) {
    unset( $posts_columns['comments'] );

    return $posts_columns;
}

add_filter( 'manage_post_posts_columns', 'my_remove_columns' );


要定位特定的帖子类型:使用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){

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' );




评论


抱歉,也许我没有正确解释自己。我指的是管理员区域中帖子编辑页面上的元框,以及设置要显示在管理员帖子列表页面上的默认帖子数。

– NetConstructor.com
2010年9月6日在8:13

所以从技术上讲这不是一个问题,真的是两个问题吗?

– Tom J Nowell♦
2010年9月6日在8:18

我修改了答案。让我知道您是否需要更多详细信息。

– sorich87
10-9-6'8:41

@ sorich87谢谢您的回复,但是从我记得的内容来看,无法确定每个metabox的确切顺序,还是在那里?也许我应该更具体一些。我基本上是在寻找各种代码段,这些代码段使我可以为所有用户预设各种选项,而不必登录每个帐户。示例:设置帖子编辑页面上元框的确切顺序,设置哪些列标题显示在帖子列表页面上,设置默认结果显示在帖子列表页面上……类似的事情。提前致谢。

– NetConstructor.com
2010年9月7日于4:41

我修改了答案。

– sorich87
2010年9月7日于7:17

#2 楼

在以下示例中,将{CPT}替换为帖子类型名称,例如postpagebookeventimaginaryfoobar……因此,如果您有名为event的帖子类型,则需要为get_user_option_meta-box-order_event添加过滤器。 />
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之外,还可以具有sideadvanced

值是逗号分隔的div ID,您可以通过查看页面源代码来获取,也可以猜测
自定义订单中未包含的任何元框都将自动添加到列表的末尾。


评论


{CPT}的术语使我有些困惑;为了弄清楚,如果您有一个名为event的帖子类型,则需要为get_user_option_meta-box-order_event添加一个过滤器。

– rinogo
17年8月10日在21:13