WordPress как на ладони
Официальная конференция по WordPress в Moскве 18-19 августа, начало в 9:00 wordpress jino

nav_menu_meta_box_object хук-фильтр . WP 3.0.0

Позволяет изменить объект, который используется для формирования метабокса в аккордеоне с выбором пунктов меню на странице создания меню в админке.

Это может быть объект класса:

  • WP_Post_Type у метабоксов "Записи", "Страницы" и произвольных типов постов
  • WP_Taxonomy у метабоксов "Рубрики", "Метки", "Формат" и произвольных таксономий.

Если вместо объекта возвратить ложное значение (false, null и так далее), то текущий метабокс добавлен в аккордеон не будет.

Пример содержания объекта у метабокса "Записи":

WP_Post_Type Object(
	[name]   => post
	[label]  => Записи
	[labels] => stdClass Object(
			[name]                  => Записи
			[singular_name]         => Запись
			[add_new]               => Добавить новую
			[add_new_item]          => Добавить запись
			[edit_item]             => Редактировать запись
			[new_item]              => Новая запись
			[view_item]             => Просмотреть запись
			[view_items]            => Просмотр записей
			[search_items]          => Поиск записей
			[not_found]             => Записей не найдено.
			[not_found_in_trash]    => Записей в корзине не найдено.
			[parent_item_colon]     =>
			[all_items]             => Все записи
			[archives]              => Архивы записей
			[attributes]            => Свойства записи
			[insert_into_item]      => Вставить в запись
			[uploaded_to_this_item] => Загруженные для этой записи
			[featured_image]        => Изображение записи
			[set_featured_image]    => Установить изображение записи
			[remove_featured_image] => Удалить изображение записи
			[use_featured_image]    => Использовать как изображение записи
			[filter_items_list]     => Фильтровать список записей
			[items_list_navigation] => Навигация по списку записей
			[items_list]            => Список записей
			[menu_name]             => Записи
			[name_admin_bar]        => Запись
		)

	[description]           =>
	[public]                => 1
	[hierarchical]          =>
	[exclude_from_search]   =>
	[publicly_queryable]    => 1
	[show_ui]               => 1
	[show_in_menu]          => 1
	[show_in_nav_menus]     => 1
	[show_in_admin_bar]     => 1
	[menu_position]         => 5
	[menu_icon]             =>
	[capability_type]       => post
	[map_meta_cap]          => 1
	[register_meta_box_cb]  =>
	[taxonomies]            => Array()

	[has_archive]       =>
	[query_var]         =>
	[can_export]        => 1
	[delete_with_user]  => 1
	[_builtin]          => 1
	[_edit_link]        => post.php?post=%d
	[cap]               => stdClass Object(
			[edit_post]               => edit_post
			[read_post]               => read_post
			[delete_post]             => delete_post
			[edit_posts]              => edit_posts
			[edit_others_posts]       => edit_others_posts
			[publish_posts]           => publish_posts
			[read_private_posts]      => read_private_posts
			[read]                    => read
			[delete_posts]            => delete_posts
			[delete_private_posts]    => delete_private_posts
			[delete_published_posts]  => delete_published_posts
			[delete_others_posts]     => delete_others_posts
			[edit_private_posts]      => edit_private_posts
			[edit_published_posts]    => edit_published_posts
			[create_posts]            => edit_posts
		)

	[rewrite]               =>
	[show_in_rest]          => 1
	[rest_base]             => posts
	[rest_controller_class] => WP_REST_Posts_Controller
	[_default_query]        => Array(
			[post_status] => publish
		)

)

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

add_filter( 'nav_menu_meta_box_object', 'filter_function_name_1377' );
function filter_function_name_1377( $meta_box_object ){
	// Делаем что-либо...

	return $meta_box_object;
}
$meta_box_object(объект)
Текущей объект для формирования метабокса в аккордеоне.

Примеры

#1 Изменим заголовок метабокса "Рубрики".

add_filter( 'nav_menu_meta_box_object', function ( $obj ) {
	if ( 'category' == $obj->name  ) {
		$obj->labels->name = 'Мои рубрики';
	}

	return $obj;
} );

#1 Удалим метабокс "Формат".

add_filter( 'nav_menu_meta_box_object', function ( $obj ) {
	if ( 'post_format' == $obj->name ) {
		$obj = null;
	}

	return $obj;
} );

Где используется хук

Код хука-фильтра nav_menu_meta_box_object

Фрагмент из: wp-admin/includes/nav-menu.php VER 4.9.8
...
		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 object $meta_box_object 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 );
		}
	}
}

/**
 * Creates meta boxes for any taxonomy menu item.
 *
 * @since 3.0.0
 */
function wp_nav_menu_taxonomy_meta_boxes() {
...
Фрагмент из: wp-admin/includes/nav-menu.php VER 4.9.8
...
}

/**
 * Creates meta boxes for any taxonomy menu item.
 *
 * @since 3.0.0
 */
function wp_nav_menu_taxonomy_meta_boxes() {
	$taxonomies = get_taxonomies( array( 'show_in_nav_menus' => true ), 'object' );

	if ( !$taxonomies )
		return;

	foreach ( $taxonomies as $tax ) {
		/** This filter is documented in wp-admin/includes/nav-menu.php */
		$tax = apply_filters( 'nav_menu_meta_box_object', $tax );
		if ( $tax ) {
			$id = $tax->name;
			add_meta_box( "add-{$id}", $tax->labels->name, 'wp_nav_menu_item_taxonomy_meta_box', 'nav-menus', 'side', 'default', $tax );
		}
	}
}

/**
 * Check whether to disable the Menu Locations meta box submit button
 *
 * @since 3.6.0
 *
 * @global bool $one_theme_location_no_menus to determine if no menus exist
 *
 * @param int|string $nav_menu_selected_id (id, name or slug) of the currently-selected menu
...
Фрагмент из: wp-admin/includes/ajax-actions.php VER 4.9.8
...

	if ( isset( $_POST['item-type'] ) && 'post_type' == $_POST['item-type'] ) {
		$type = 'posttype';
		$callback = 'wp_nav_menu_item_post_type_meta_box';
		$items = (array) get_post_types( array( 'show_in_nav_menus' => true ), 'object' );
	} elseif ( isset( $_POST['item-type'] ) && 'taxonomy' == $_POST['item-type'] ) {
		$type = 'taxonomy';
		$callback = 'wp_nav_menu_item_taxonomy_meta_box';
		$items = (array) get_taxonomies( array( 'show_ui' => true ), 'object' );
	}

	if ( ! empty( $_POST['item-object'] ) && isset( $items[$_POST['item-object']] ) ) {
		$menus_meta_box_object = $items[ $_POST['item-object'] ];

		/** This filter is documented in wp-admin/includes/nav-menu.php */
		$item = apply_filters( 'nav_menu_meta_box_object', $menus_meta_box_object );
		ob_start();
		call_user_func_array($callback, array(
			null,
			array(
				'id' => 'add-' . $item->name,
				'title' => $item->labels->name,
				'callback' => $callback,
				'args' => $item,
			)
		));

		$markup = ob_get_clean();

		echo wp_json_encode(array(
			'replace-id' => $type . '-' . $item->name,
...
campusboy 2946youtube.com/c/wpplus
Создатель YouTube канала wp-plus, на котором делюсь своим опытом. Активный пользователь wp-kama.ru. WordPress-разработчик. Разработка сайтов и лендингов. Доработка существующих проектов. Сопровождение ресурсов.
Комментариев нет
    Здравствуйте, !     Войти . Зарегистрироваться