是否将右侧边栏元对象放在发布元对象的正下方?

时间:2015-12-27 作者:JasonDavis

我有一个自定义的post meta框,我想放在右边的边栏中。当我将优先级设置为high 它出现在侧边栏中最上面的第一个位置。如果我设置为core 它出现在右侧边栏的底部。

我想要的位置是在右侧边栏的2号位置。在发布元框的正下方。

这可能吗?

2 个回复
SO网友:Prasad Nevase

尽管如此,如果它有点像客户的要求,那么下面是hack 某种解决方案。将此代码添加到add_meta_box() 作用为了理解,下面我提供了完整的函数,但您需要使用选择性代码:-)请告诉我它是如何运行的。

function myplugin_add_meta_box() {

    $screens = array( \'post\', \'page\' );

    foreach ( $screens as $screen ) {

        add_meta_box(
            \'testdiv\',
            __( \'My Post Section Title\', \'myplugin_textdomain\' ),
            \'myplugin_meta_box_callback\',
            $screen,
            \'side\'
        );
    }
    /* Get the user details to find user id for whom this order should be shown. Ideally, I believe it will be admin user. Make sure you change the email id*/
    $user = get_user_by( \'email\', \'[email protected]\' ); 
    $order = get_user_option("meta-box-order_post", $user->ID);

    $current_order = array(); 
    $current_order = explode(",",$order[\'side\']);

    for($i=0 ; $i <= count ($current_order) ; $i++){
        $temp = $current_order[$i];
        if ( $current_order[$i] == \'testdiv\' && $i != 1) {
            $current_order[$i] = $current_order[1];         
            $current_order[1] = $temp;          
        }
    }

    $order[\'side\'] = implode(",",$current_order);

    update_user_option($user->ID, "meta-box-order_page", $order, true);
    update_user_option($user->ID, "meta-box-order_post", $order, true);

}
add_action( \'add_meta_boxes\', \'myplugin_add_meta_box\', 2 );

SO网友:Anthony Eden

经过一些实验,我想出了这个方法,它可能会更稳健一些:

add_action(\'add_meta_boxes\', function () {
    $screens = array(\'post\', \'page\');

    foreach ($screens as $screen) {
        add_meta_box("metabox_name", "Meta Box Title", "my_metabox_callback", $screen, "side", "high");

        // Force the box to display below the \'Publish\' metabox
        $user = wp_get_current_user(); 
        $order = get_user_option("meta-box-order_".$screen, $user->ID);

        if(strpos($order[\'side\'], "metabox_name") !== false) {
            $order = str_replace(\'metabox_name,\', \'\', $order[\'side\']);
        }

        if(strpos($order[\'side\'], "submitdiv") === false) {
            $order[\'side\'] = \'submitdiv,\' . $order[\'side\'];
        }

        if(substr($order[\'side\'], -1) == ",") {
            $order[\'side\'] = substr($order[\'side\'], 0, -1);
        }

        $current_order = array(); 
        $current_order = explode(",", $order[\'side\']);

        // Add this metabox to the order array
        $key = array_search(\'submitdiv\', $current_order, true);

        if($key !== false) {
            $new_order = array_merge(
                array_slice($current_order, 0, $key+1),
                array("metabox_name")
            );

            if(count($current_order) > $key) {
                $new_order = array_merge(
                    $new_order,
                    array_slice($current_order, $key+1)
                );
            }

            $order[\'side\'] = implode(",", $new_order);

            update_user_option($user->ID, "meta-box-order_".$screen, $order, true);
        }
    }
});
这对我来说并不是很优雅,但它确实适用于早期答案失败的各种情况(例如新用户)。

相关推荐

保存Metabox内容无效

我正在尝试保存一个metabox输入,但它似乎不起作用。我使用的是数组(因为我需要我的metabox有60行),所以我假设问题就出在数组中。这是我为管理员提供的metabox函数(它可以正确显示我要显示的信息):function mock_metabox() { global $post; // Nonce field wp_nonce_field( basename( __FILE__ ), \'mock_fields\' ); // in