do_meta_boxes() WP 2.5.0

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

За допомогою цієї функції виводяться всі метабокси в адмін-панелі WordPress, наприклад, при редагуванні запису, або в консолі.

Хуків немає.

Повертає

int. Кількість метабоксів.

Використання

do_meta_boxes( $screen, $context, $object );
$screen
(рядок/WP_Screen) (обов’язковий)
Ярлик сторінки адмін-панелі. Цей ярлик потрібно вказувати під час реєстрації метабоксу, у параметрі
$screen функції
add_meta_box()
$context
(рядок) (обов’язковий)
Місце метабоксу на сторінці вказується в параметрі
$context функції
add_meta_box() .
$object
(змішаний) (обов’язковий)
Будь-які дані, які будуть передані в перший аргумент функції код метабоксу, що виводить.

Приклади

0

#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

нотатки

  • Global. Масив. $wp_meta_boxes

список змін

З версії 2.5.0Введено.

Код do_meta_boxes() WP 6.0.2

<?php
function do_meta_boxes( $screen, $context, $data_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">', esc_attr( $context ) );

	// Grab the ones the user has manually sorted.
	// Повний список з їхнього попереднього контексту/приоритету і в одному з user chose.
	$sorted = get_user_option( "meta-box-order_$page");

	if ( ! $already_sorted && $sorted ) {
		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;
					}

					$block_compatible = true;
					if ( is_array( $box['args'] ) ) {
						// Якщо мета box is just here for back compat, don't show it in the block editor.
						if ( $screen->is_block_editor() && isset( $box['args']['__back_compat_meta_box'] ) && $box['args']['__back_compat_meta_box'] ) {
							continue;
						}

						if ( isset( $box['args']['__block_editor_compatible_meta_box'] ) ) {
							$block_compatible = (bool) $box['args']['__block_editor_compatible_meta_box'];
							unset( $box['args']['__block_editor_compatible_meta_box'] );
						}

						// Якщо мета box is declared incompatible with the block editor, override the callback function.
						if ( ! $block_compatible && $screen->is_block_editor() ) {
							$box['old_callback'] = $box['callback'];
							$box['callback'] = 'do_block_editor_incompatible_meta_box';
						}

						if ( isset( $box['args']['__back_compat_meta_box'] ) ) {
							$block_compatible = $block_compatible || (bool) $box['args']['__back_compat_meta_box'];
							unset( $box['args']['__back_compat_meta_box'] );
						}
					}

					$i++;
					// get_hidden_meta_boxes() doesn't apply in the block editor.
					$hidden_class = ( ! $screen->is_block_editor() && in_array( $box['id'], $hidden, true ) ) ? 'hide-if-js' : '';
					echo '<div id="' . $box['id'] . '" class="postbox ' . postbox_classes( $box['id'], $page ) . $hidden_class . '" ' . '>'. "n";

					echo '<div class="postbox-header">';
					echo '<h2 class="hndle">';
					if ( 'dashboard_php_nag' === $box['id'] ) {
						echo '<span aria-hidden="true" class="dashicons dashicons-warning"></span>';
						echo '<span class="screen-reader-text">' . __( 'Warning:' ) . '</span>';
					}
					echo $box['title'];
					echo "</h2>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 user callback function.
							unset( $box['args']['__widget_basename'] );
						}

						echo '<div class="handle-actions hide-if-no-js">';

						echo '<button type="button" class="handle-order-higher" aria-disabled="false" aria-describedby="' . $box['id'] . '-handle-order-higher-description" >';
						echo '<span class="screen-reader-text">' . __('Move up'). '</span>';
						echo '<span class="order-higher-indicator" aria-hidden="true"></span>';
						echo '</button>';
						echo '<span class="hidden" id="' . $box['id'] . '-handle-order-higher-description">' . sprintf(
							/* translators: %s: Meta box title. */
							__( 'Move %s box up' ),
							$widget_title
						). '</span>';

						echo '<button type="button" class="handle-order-lower" aria-disabled="false" aria-describedby="' . $box['id'] . '-handle-order-lower-description" >';
						echo '<span class="screen-reader-text">' . __('Move down'). '</span>';
						echo '<span class="order-lower-indicator" aria-hidden="true"></span>';
						echo '</button>';
						echo '<span class="hidden" id="' . $box['id'] . '-handle-order-lower-description">' . sprintf(
							/* translators: %s: Meta box title. */
							__( 'Move %s box down' ),
							$widget_title
						). '</span>';

						echo '<button type="button" class="handlediv" aria-expanded="true">';
						echo '<span class="screen-reader-text">' . sprintf(
							/* translators: %s: Meta box title. */
							__( 'Toggle panel: %s' ),
							$widget_title
						). '</span>';
						echo '<span class="toggle-indicator" aria-hidden="true"></span>';
						echo '</button>';

						echo '</div>';
					}
					echo '</div>';

					echo '<div class="inside">' . "n";

					if ( WP_DEBUG && ! $block_compatible && 'edit' === $screen->parent_base && ! $screen->is_block_editor() && ! isset( $_GET['meta-box-loader'] ) ) {
						$plugin = _get_plugin_from_callback( $box['callback'] );
						if ( $plugin ) {
							?>
							<div class="error inline">
								<p>
									<?php
										/* translators: %s: Name of plugin that generated this meta box. */
										printf( __( 'This meta box, від %s plugin, is not compatible with the block editor.' ), "<strong>{$plugin['Name']}</strong>" );
									?>
								</p>
							</div>
							<?php
						}
					}

					call_user_func($box['callback'], $data_object, $box);
					echo "</div>n";
					echo "</div>n";
				}
			}
		}
	}

	echo '</div>';

	return $i;

}

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *