函数文档

wp_initial_nav_menu_meta_boxes()

💡 云策文档标注

概述

wp_initial_nav_menu_meta_boxes() 函数用于限制首次使用 WordPress 导航菜单编辑器的用户可见的元框数量,仅显示页面、文章、链接和分类相关元框,以简化界面。

关键要点

  • 函数检查用户是否已设置 metaboxhidden_nav-menus 选项,若已设置或 $wp_meta_boxes 非数组则直接返回。
  • 定义初始元框数组 $initial_meta_boxes,包含 'add-post-type-page'、'add-post-type-post'、'add-custom-links' 和 'add-category'。
  • 遍历 $wp_meta_boxes['nav-menus'] 结构,将非初始元框的 ID 收集到 $hidden_meta_boxes 数组中。
  • 使用 wp_get_current_user() 获取当前用户对象,并通过 update_user_meta() 更新用户元数据,隐藏非初始元框。

代码示例

function wp_initial_nav_menu_meta_boxes() {
	global $wp_meta_boxes;

	if ( get_user_option( 'metaboxhidden_nav-menus' ) !== false || ! is_array( $wp_meta_boxes ) ) {
		return;
	}

	$initial_meta_boxes = array( 'add-post-type-page', 'add-post-type-post', 'add-custom-links', 'add-category' );
	$hidden_meta_boxes  = array();

	foreach ( array_keys( $wp_meta_boxes['nav-menus'] ) as $context ) {
		foreach ( array_keys( $wp_meta_boxes['nav-menus'][ $context ] ) as $priority ) {
			foreach ( $wp_meta_boxes['nav-menus'][ $context ][ $priority ] as $box ) {
				if ( in_array( $box['id'], $initial_meta_boxes, true ) ) {
					unset( $box['id'] );
				} else {
					$hidden_meta_boxes[] = $box['id'];
				}
			}
		}
	}

	$user = wp_get_current_user();
	update_user_meta( $user->ID, 'metaboxhidden_nav-menus', $hidden_meta_boxes );
}

注意事项

  • 此函数仅在用户首次使用导航菜单编辑器时执行,通过检查 metaboxhidden_nav-menus 选项避免重复隐藏元框。
  • 隐藏的元框 ID 存储在用户元数据中,用户后续可以自定义显示或隐藏元框。
  • 函数依赖于全局变量 $wp_meta_boxes,确保在正确上下文中调用。

📄 原文内容

Limit the amount of meta boxes to pages, posts, links, and categories for first time users.

Source

function wp_initial_nav_menu_meta_boxes() {
	global $wp_meta_boxes;

	if ( get_user_option( 'metaboxhidden_nav-menus' ) !== false || ! is_array( $wp_meta_boxes ) ) {
		return;
	}

	$initial_meta_boxes = array( 'add-post-type-page', 'add-post-type-post', 'add-custom-links', 'add-category' );
	$hidden_meta_boxes  = array();

	foreach ( array_keys( $wp_meta_boxes['nav-menus'] ) as $context ) {
		foreach ( array_keys( $wp_meta_boxes['nav-menus'][ $context ] ) as $priority ) {
			foreach ( $wp_meta_boxes['nav-menus'][ $context ][ $priority ] as $box ) {
				if ( in_array( $box['id'], $initial_meta_boxes, true ) ) {
					unset( $box['id'] );
				} else {
					$hidden_meta_boxes[] = $box['id'];
				}
			}
		}
	}

	$user = wp_get_current_user();
	update_user_meta( $user->ID, 'metaboxhidden_nav-menus', $hidden_meta_boxes );
}

Changelog

Version Description
3.0.0 Introduced.