类文档

WP_Widget_Form_Customize_Control

💡 云策文档标注

概述

WP_Widget_Form_Customize_Control 是 WordPress 自定义控件类,用于在小部件表单的自定义器中处理控件逻辑。它扩展自 WP_Customize_Control,主要用于导出小部件数据到 JavaScript 以实现延迟嵌入。

关键要点

  • 继承自 WP_Customize_Control,类型为 'widget_form',专门用于小部件表单的自定义器控件。
  • 包含小部件相关属性,如 widget_id、widget_id_base、sidebar_id、width、height、is_wide 和 is_new,用于标识和配置小部件。
  • 重写了 to_json 方法,用于收集控件参数并导出到 JavaScript,包括小部件控制部分和内容部分。
  • 重写了 render_content 方法为空操作,因为内容通过 to_json 导出以实现延迟嵌入。
  • 提供了 active_callback 方法,用于检查当前小部件是否在页面上渲染。

代码示例

class WP_Widget_Form_Customize_Control extends WP_Customize_Control {
    public $type = 'widget_form';
    public $widget_id;
    public $widget_id_base;
    public $sidebar_id;
    public $is_new = false;
    public $width;
    public $height;
    public $is_wide = false;

    public function to_json() {
        global $wp_registered_widgets;
        parent::to_json();
        $exported_properties = array( 'widget_id', 'widget_id_base', 'sidebar_id', 'width', 'height', 'is_wide' );
        foreach ( $exported_properties as $key ) {
            $this->json[ $key ] = $this->$key;
        }
        require_once ABSPATH . 'wp-admin/includes/widgets.php';
        $widget = $wp_registered_widgets[ $this->widget_id ];
        if ( ! isset( $widget['params'][0] ) ) {
            $widget['params'][0] = array();
        }
        $args = array(
            'widget_id'   => $widget['id'],
            'widget_name' => $widget['name'],
        );
        $args = wp_list_widget_controls_dynamic_sidebar(
            array(
                0 => $args,
                1 => $widget['params'][0],
            )
        );
        $widget_control_parts = $this->manager->widgets->get_widget_control_parts( $args );
        $this->json['widget_control'] = $widget_control_parts['control'];
        $this->json['widget_content'] = $widget_control_parts['content'];
    }

    public function render_content() {}

    public function active_callback() {
        return $this->manager->widgets->is_widget_rendered( $this->widget_id );
    }
}

📄 原文内容

Widget Form Customize Control class.

Description

See also

Methods

Name Description
WP_Widget_Form_Customize_Control::active_callback Whether the current widget is rendered on the page.
WP_Widget_Form_Customize_Control::render_content Override render_content to be no-op since content is exported via to_json for deferred embedding.
WP_Widget_Form_Customize_Control::to_json Gather control params for exporting to JavaScript.

Source

class WP_Widget_Form_Customize_Control extends WP_Customize_Control {
	/**
	 * Customize control type.
	 *
	 * @since 3.9.0
	 * @var string
	 */
	public $type = 'widget_form';

	/**
	 * Widget ID.
	 *
	 * @since 3.9.0
	 * @var string
	 */
	public $widget_id;

	/**
	 * Widget ID base.
	 *
	 * @since 3.9.0
	 * @var string
	 */
	public $widget_id_base;

	/**
	 * Sidebar ID.
	 *
	 * @since 3.9.0
	 * @var string
	 */
	public $sidebar_id;

	/**
	 * Widget status.
	 *
	 * @since 3.9.0
	 * @var bool True if new, false otherwise. Default false.
	 */
	public $is_new = false;

	/**
	 * Widget width.
	 *
	 * @since 3.9.0
	 * @var int
	 */
	public $width;

	/**
	 * Widget height.
	 *
	 * @since 3.9.0
	 * @var int
	 */
	public $height;

	/**
	 * Widget mode.
	 *
	 * @since 3.9.0
	 * @var bool True if wide, false otherwise. Default false.
	 */
	public $is_wide = false;

	/**
	 * Gather control params for exporting to JavaScript.
	 *
	 * @since 3.9.0
	 *
	 * @global array $wp_registered_widgets
	 */
	public function to_json() {
		global $wp_registered_widgets;

		parent::to_json();
		$exported_properties = array( 'widget_id', 'widget_id_base', 'sidebar_id', 'width', 'height', 'is_wide' );
		foreach ( $exported_properties as $key ) {
			$this->json[ $key ] = $this->$key;
		}

		// Get the widget_control and widget_content.
		require_once ABSPATH . 'wp-admin/includes/widgets.php';

		$widget = $wp_registered_widgets[ $this->widget_id ];
		if ( ! isset( $widget['params'][0] ) ) {
			$widget['params'][0] = array();
		}

		$args = array(
			'widget_id'   => $widget['id'],
			'widget_name' => $widget['name'],
		);

		$args                 = wp_list_widget_controls_dynamic_sidebar(
			array(
				0 => $args,
				1 => $widget['params'][0],
			)
		);
		$widget_control_parts = $this->manager->widgets->get_widget_control_parts( $args );

		$this->json['widget_control'] = $widget_control_parts['control'];
		$this->json['widget_content'] = $widget_control_parts['content'];
	}

	/**
	 * Override render_content to be no-op since content is exported via to_json for deferred embedding.
	 *
	 * @since 3.9.0
	 */
	public function render_content() {}

	/**
	 * Whether the current widget is rendered on the page.
	 *
	 * @since 4.0.0
	 *
	 * @return bool Whether the widget is rendered.
	 */
	public function active_callback() {
		return $this->manager->widgets->is_widget_rendered( $this->widget_id );
	}
}

Changelog

Version Description
3.9.0 Introduced.