返回介绍

do_meta_boxes()

发布于 2017-09-10 22:18:20 字数 7158 浏览 1324 评论 0 收藏 0

do_meta_boxes( string|WP_Screen $screen,  string $context,  mixed $object )

Meta-Box template function


description


参数

$screen

(string|WP_Screen) (Required) Screen identifier

$context

(string) (Required) box context

$object

(mixed) (Required) gets passed to the box callback function as first parameter


返回值

(int) number of meta_boxes


源代码

File: wp-admin/includes/template.php

function do_meta_boxes( $screen, $context, $object ) {
	global $wp_meta_boxes;
	static $already_sorted = false;

	if ( empty( $screen ) )
		$screen = get_current_screen();
	elseif ( is_string( $screen ) )
		$screen = convert_to_screen( $screen );

	$page = $screen->id;

	$hidden = get_hidden_meta_boxes( $screen );

	printf('<div id="%s-sortables" class="meta-box-sortables">', htmlspecialchars($context));

	// Grab the ones the user has manually sorted. Pull them out of their previous context/priority and into the one the user chose
	if ( ! $already_sorted && $sorted = get_user_option( "meta-box-order_$page" ) ) {
		foreach ( $sorted as $box_context => $ids ) {
			foreach ( explode( ',', $ids ) as $id ) {
				if ( $id && 'dashboard_browser_nag' !== $id ) {
					add_meta_box( $id, null, null, $screen, $box_context, 'sorted' );
				}
			}
		}
	}

	$already_sorted = true;

	$i = 0;

	if ( isset( $wp_meta_boxes[ $page ][ $context ] ) ) {
		foreach ( array( 'high', 'sorted', 'core', 'default', 'low' ) as $priority ) {
			if ( isset( $wp_meta_boxes[ $page ][ $context ][ $priority ]) ) {
				foreach ( (array) $wp_meta_boxes[ $page ][ $context ][ $priority ] as $box ) {
					if ( false == $box || ! $box['title'] )
continue;
					$i++;
					$hidden_class = in_array($box['id'], $hidden) ? ' hide-if-js' : '';
					echo '<div id="' . $box['id'] . '" class="postbox ' . postbox_classes($box['id'], $page) . $hidden_class . '" ' . '>' . "\n";
					if ( 'dashboard_browser_nag' != $box['id'] ) {
$widget_title = $box[ 'title' ];

if ( is_array( $box[ 'args' ] ) && isset( $box[ 'args' ][ '__widget_basename' ] ) ) {
$widget_title = $box[ 'args' ][ '__widget_basename' ];
// Do not pass this parameter to the user callback function.
unset( $box[ 'args' ][ '__widget_basename' ] );
}

echo '<button type="button" class="handlediv" aria-expanded="true">';
echo '<span class="screen-reader-text">' . sprintf( __( 'Toggle panel: %s' ), $widget_title ) . '</span>';
echo '<span class="toggle-indicator" aria-hidden="true"></span>';
echo '</button>';
					}
					echo "<h2 class='hndle'><span>{$box['title']}</span></h2>\n";
					echo '<div class="inside">' . "\n";
					call_user_func($box['callback'], $object, $box);
					echo "</div>\n";
					echo "</div>\n";
				}
			}
		}
	}

	echo "</div>";

	return $i;

}

更新日志

Versiondescription
2.5.0Introduced.

相关函数

Uses

  • wp-admin/includes/screen.php: get_current_screen()
  • wp-admin/includes/screen.php: get_hidden_meta_boxes()
  • wp-admin/includes/template.php: convert_to_screen()
  • wp-admin/includes/template.php: add_meta_box()
  • wp-admin/includes/post.php: postbox_classes()
  • wp-includes/l10n.php: __()
  • wp-includes/user.php: get_user_option()
  • Show 2 more uses Hide more uses

Used By

  • wp-admin/includes/dashboard.php: wp_dashboard()

User Contributed Notes

  1. Skip to note content You must log in to vote on the helpfulness of this noteVote results for this note: 0You must log in to vote on the helpfulness of this note Contributed by ramon fincken

    When wanting to change the order of metaboxes there is an undocumented (I could not find it at WP.org) filter you can use.

    get_user_option_meta-box-order_[CUSTOM_POST_TYPE]
    it will have 1 parameter, the $order array.

    For example for the CPT named posts
    get_user_option_meta-box-order_post

    This is an example to re-order metaboxes (note that this example might differ from your metaboxes)

    add_filter( 'get_user_option_meta-box-order_post', 'wpse25793_one_column_for_all' );
    function wpse25793_one_column_for_all( $order )
    {
        return array(
            'normal'   => join( ",", array(
                'postexcerpt',
                'formatdiv',
                'trackbacksdiv',
                'tagsdiv-post_tag',
                'categorydiv',
                'postimagediv',
                'postcustom',
                'commentstatusdiv',
                'slugdiv',
                'authordiv',
                'submitdiv',
            ) ),
            'side'     => '',
            'advanced' => '',
        );
    }

    源代码: http://wordpress.stackexchange.com/questions/25793/how-to-force-one-column-layout-on-custom-post-type-edit-page/25814#25814

  2. This is how you can register a new meta box, then outputs that meta box using this do_meta_boxes function:

    
    function adding_custom_meta_boxes() {
        add_meta_box( 
            'meta_box_id',
            __( 'Title of the Metabox' ),
            'callback_metabox_function',
            'my_custom_menu_page' );
    }
    add_action( 'add_meta_boxes', 'adding_custom_meta_boxes', 10, 2 );
    
    function callback_metabox_function(){
        echo 'Metabox Content';
    }
    
    do_meta_boxes( 'my_custom_menu_page', 'normal', '' );
    

    Worth mentioning that the ‘get_user_option_meta-box-order_post’ hook referenced in @ramon fincken’s example is “undocumented” only because it’s a dynamic hook, specifically the get_user_option_{$option} hook, where “meta-box-order” is a specific user option. Cool tip though :-)

    Example

    Here is an example that uses add_meta_box to register a new meta box, then outputs that meta box using this do_meta_boxes function:

    
    add_meta_box( 
        'my-custom-meta-box',
        __( 'My Custom Meta Box', 'textdomain' ),
        'my_custom_menu_page',
        'normal'
    );
    
    do_meta_boxes( 'my_custom_menu_page', 'normal', '' );
    

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文