设置默认管理屏幕选项和Metabox顺序


28

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


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

Answers:


23

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

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

要禁用元框:(根据您的需要进行定制,请查看html代码中的元框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

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

您需要使用过滤器manage _ {$ 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;

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

1
所以从技术上来讲这不是一个问题,真的是两个问题吗?
汤姆·J·诺维尔

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

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

我修改了答案。
sorich87

9

在下面的例子中,替换{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,您可以通过查看页面源代码来获取,也可以猜测
  • 您的自定义订单中不包含的任何元框都将自动添加到列表的末尾。

1
{CPT}术语使我有些困惑;要澄清的是,如果您有一个名为的帖子类型event,则需要为添加一个过滤器get_user_option_meta-box-order_event
rinogo
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.