wp_nav_menu_post_type_meta_boxes()WP 3.0.0

Создаёт метабокс под любой тип поста в аккордеоне на странице создания меню.

Работает на основе функции get_post_types(), с параметром 'show_in_nav_menus' => true.

Функция используется движком и как правило не предназначена для использования где-либо.

Для отображения подобных метабоксов для таксономий используется wp_nav_menu_taxonomy_meta_boxes().

Каждый полученный объект типа поста пропускаются через хук-фильтр nav_menu_meta_box_object, на котором можно изменить, к примеру, заголовок метабокса или вообще отменить его вывод в аккордеоне.

Метабокс добавляется функцией add_meta_box() по следующему шаблону:

add_meta_box( "add-post-type-{$id}",
	$post_type->labels->name,
	'wp_nav_menu_item_post_type_meta_box',
	'nav-menus',
	'side',
	$priority,
	$post_type
);

Где:

  • $post_type->name - имя поста, например post, page и так далее.
  • $id = $post_type->name.
  • $priority = ( 'page' == $post_type->name ? 'core' : 'default' ).
  • $post_type - объект типа поста.
Работает на основе: add_meta_box()
Хуки из функции

Возвращает

null. Ничего (null).

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

wp_nav_menu_post_type_meta_boxes();

Примеры

0

#1 Используется в ядре WP

Пример использования смотрите в коде функции wp_nav_menu_setup().

Список изменений

С версии 3.0.0 Введена.

Код wp_nav_menu_post_type_meta_boxes() WP 6.5.2

function wp_nav_menu_post_type_meta_boxes() {
	$post_types = get_post_types( array( 'show_in_nav_menus' => true ), 'object' );

	if ( ! $post_types ) {
		return;
	}

	foreach ( $post_types as $post_type ) {
		/**
		 * Filters whether a menu items meta box will be added for the current
		 * object type.
		 *
		 * If a falsey value is returned instead of an object, the menu items
		 * meta box for the current meta box object will not be added.
		 *
		 * @since 3.0.0
		 *
		 * @param WP_Post_Type|false $post_type The current object to add a menu items
		 *                                      meta box for.
		 */
		$post_type = apply_filters( 'nav_menu_meta_box_object', $post_type );

		if ( $post_type ) {
			$id = $post_type->name;
			// Give pages a higher priority.
			$priority = ( 'page' === $post_type->name ? 'core' : 'default' );
			add_meta_box(
				"add-post-type-{$id}",
				$post_type->labels->name,
				'wp_nav_menu_item_post_type_meta_box',
				'nav-menus',
				'side',
				$priority,
				$post_type
			);
		}
	}
}