do_meta_boxes

Выводит любые метабоксы зарегистрированные для страницы админ-панели и определенного контекста, с помощью функции add_meta_box().

С помощью этой функции, выводятся все метабоксы в админ-панели WordPress, например, при редактировании записи, или в консоли.

Хуков нет.

Возвращает

Число. Количество метабоксов.

Использование

do_meta_boxes( $screen, $context, $object );
$screen(строка/WP_Screen) (обязательный)
Ярлык страницы админ-панели. Этот Ярлык нужно указывать при регистрации метабокса, в параметре $screen функции add_meta_box()
$context(строка) (обязательный)
Место метабокса на странице, указывается в параметре $context функции add_meta_box().
$object(смешанный) (обязательный)
Любые данные, которые будут переданы в первый аргумент функции выводящей код метабокса.

Примеры

#1 Пример регистрации и вывода метабокса

Этот пример показывает как зарегистрировать и вывести метабокс на странице.

Регистрируем метабокс:

// регистрируем метабокс
add_meta_box( 'my-metabox', 'Заголовок метабокса', 'my_metabox_function', 'mymetabox_screen', 'normal' );

// функция, которая выводит HTMl код метабокса
function my_metabox_function( $data ){
	echo $data[0] .' '. $data[1];
}

Выводим все метабоксы:

// теперь, выводим все метабоксы зарегистрированные ранее, сейчас только одни метабокс.
// этот вызов нужно вставлять на отдельную страницу админ-панели
do_meta_boxes( 'mymetabox_screen', 'normal', array('мой', 'метабокс') );

В результате на странице где вызвана функция do_meta_boxes() мы увидим метабокс с текстом “мой метабокс”.

metabox-add

Код из


wp-admin/includes/template.php

WP 4.7.2

<?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 button-link" 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;

}

Комментарии:


Оставить комментарий

Your email address will not be published. Required fields are marked *