WP_Customize_Nav_Menu_Item_Control
云策文档标注
概述
WP_Customize_Nav_Menu_Item_Control 是 WordPress 自定义器中的一个控件类,用于表示给定菜单项的名称字段。它继承自 WP_Customize_Control,专门处理导航菜单项的定制界面。
关键要点
- 继承自 WP_Customize_Control,控制类型为 'nav_menu_item'。
- 包含一个 WP_Customize_Nav_Menu_Item_Setting 类型的 setting 属性,用于关联菜单项设置。
- 主要方法包括构造函数 __construct、JS 模板 content_template、参数返回 json 和空渲染 render_content。
- 使用 Underscore.js 模板来渲染控制界面,不直接输出 HTML。
代码示例
public function content_template() {
?>
<# if ( data.item_type_label ) { #>
<span class="item-type">{{ data.item_type_label }}</span>
<# } #>
<# if ( data.is_post_type ) { #>
<span class="dashicons dashicons-admin-post"></span>
<# } #>
<# if ( data.title ) { #>
<span class="item-title {{ data.title ? '' : 'no-title' }}">{{ data.title || data.original_title || wp.customize.Menus.data.l10n.untitled }}</span>
<# } #>
<?php
}注意事项
- render_content 方法为空,因为控制内容通过 JS 模板渲染,避免直接输出 HTML。
- json 方法返回控制参数,包括关联的 post_id,用于前端处理。
- 自 WordPress 4.3.0 版本引入,是自定义器导航菜单功能的一部分。
原文内容
Customize control to represent the name field for a given menu.
Description
See also
Methods
| Name | Description |
|---|---|
| WP_Customize_Nav_Menu_Item_Control::__construct | Constructor. |
| WP_Customize_Nav_Menu_Item_Control::content_template | JS/Underscore template for the control UI. |
| WP_Customize_Nav_Menu_Item_Control::json | Return parameters for this control. |
| WP_Customize_Nav_Menu_Item_Control::render_content | Don’t render the control’s content – it’s rendered with a JS template. |
Source
class WP_Customize_Nav_Menu_Item_Control extends WP_Customize_Control {
/**
* Control type.
*
* @since 4.3.0
* @var string
*/
public $type = 'nav_menu_item';
/**
* The nav menu item setting.
*
* @since 4.3.0
* @var WP_Customize_Nav_Menu_Item_Setting
*/
public $setting;
/**
* Constructor.
*
* @since 4.3.0
*
* @see WP_Customize_Control::__construct()
*
* @param WP_Customize_Manager $manager Customizer bootstrap instance.
* @param string $id The control ID.
* @param array $args Optional. Arguments to override class property defaults.
* See WP_Customize_Control::__construct() for information
* on accepted arguments. Default empty array.
*/
public function __construct( $manager, $id, $args = array() ) {
parent::__construct( $manager, $id, $args );
}
/**
* Don't render the control's content - it's rendered with a JS template.
*
* @since 4.3.0
*/
public function render_content() {}
/**
* JS/Underscore template for the control UI.
*
* @since 4.3.0
*/
public function content_template() {
?>
<div class="menu-item-bar">
<div class="menu-item-handle">
<span class="item-type" aria-hidden="true">{{ data.item_type_label }}</span>
<span class="item-title" aria-hidden="true">
<span class="spinner"></span>
<span class="menu-item-title<# if ( ! data.title && ! data.original_title ) { #> no-title<# } #>">{{ data.title || data.original_title || wp.customize.Menus.data.l10n.untitled }}</span>
<# if ( 0 === data.depth ) { #>
<span class="is-submenu" style="display: none;"></span>
<# } else { #>
<span class="is-submenu"></span>
<# } #>
</span>
<span class="item-controls">
<button type="button" class="button-link item-edit" aria-expanded="false"><span class="screen-reader-text">
<# if ( 0 === data.depth ) { #>
<# } else if ( 1 === data.depth ) { #>
<# } else { #>
<# } #>
</span><span class="toggle-indicator" aria-hidden="true"></span></button>
<button type="button" class="button-link item-delete submitdelete deletion"><span class="screen-reader-text">
</span></button>
</span>
</div>
</div>
<div class="menu-item-settings" id="menu-item-settings-{{ data.menu_item_id }}">
<# if ( 'custom' === data.item_type ) { #>
<p class="field-url description description-thin">
<label for="edit-menu-item-url-{{ data.menu_item_id }}">
<br />
<input class="widefat code edit-menu-item-url" type="text" id="edit-menu-item-url-{{ data.menu_item_id }}" name="menu-item-url" />
</label>
</p>
<# } #>
<p class="description description-thin">
<label for="edit-menu-item-title-{{ data.menu_item_id }}">
<br />
<input type="text" id="edit-menu-item-title-{{ data.menu_item_id }}" placeholder="{{ data.original_title }}" class="widefat edit-menu-item-title" name="menu-item-title" />
</label>
</p>
<p class="field-link-target description description-thin">
<label for="edit-menu-item-target-{{ data.menu_item_id }}">
<input type="checkbox" id="edit-menu-item-target-{{ data.menu_item_id }}" class="edit-menu-item-target" value="_blank" name="menu-item-target" />
</label>
</p>
<p class="field-title-attribute field-attr-title description description-thin">
<label for="edit-menu-item-attr-title-{{ data.menu_item_id }}">
<br />
<input type="text" id="edit-menu-item-attr-title-{{ data.menu_item_id }}" class="widefat edit-menu-item-attr-title" name="menu-item-attr-title" />
</label>
</p>
<p class="field-css-classes description description-thin">
<label for="edit-menu-item-classes-{{ data.menu_item_id }}">
<br />
<input type="text" id="edit-menu-item-classes-{{ data.menu_item_id }}" class="widefat code edit-menu-item-classes" name="menu-item-classes" />
</label>
</p>
<p class="field-xfn description description-thin">
<label for="edit-menu-item-xfn-{{ data.menu_item_id }}">
<br />
<input type="text" id="edit-menu-item-xfn-{{ data.menu_item_id }}" class="widefat code edit-menu-item-xfn" name="menu-item-xfn" />
</label>
</p>
<p class="field-description description description-thin">
<label for="edit-menu-item-description-{{ data.menu_item_id }}">
<br />
<textarea id="edit-menu-item-description-{{ data.menu_item_id }}" class="widefat edit-menu-item-description" rows="3" cols="20" name="menu-item-description">{{ data.description }}</textarea>
<span class="description"></span>
</label>
</p>
<div class="menu-item-actions description-thin submitbox">
<# if ( ( 'post_type' === data.item_type || 'taxonomy' === data.item_type ) && '' !== data.original_title ) { #>
<p class="link-to-original">
{{ data.original_title }}</a>' );
?>
</p>
<# } #>
<button type="button" class="button-link button-link-delete item-delete submitdelete deletion"></button>
<span class="spinner"></span>
</div>
<input type="hidden" name="menu-item-db-id[{{ data.menu_item_id }}]" class="menu-item-data-db-id" value="{{ data.menu_item_id }}" />
<input type="hidden" name="menu-item-parent-id[{{ data.menu_item_id }}]" class="menu-item-data-parent-id" value="{{ data.parent }}" />
</div><!-- .menu-item-settings-->
<ul class="menu-item-transport"></ul>
setting->post_id;
return $exported;
}
}
Changelog
| Version | Description |
|---|---|
| 4.3.0 | Introduced. |