通过register_widget动作钩子向WP_Widget构造函数传递参数

3
在使用register_widget()函数注册自定义WordPress小部件时,是否可以传递其他参数? register_widget只接受一个参数-目标类名。
add_action( 'widgets_init', function() {
    register_widget("ID_Projects_Widget"); 
} );

class ID_Projects_Widget extends WP_Widget {
    public function __construct() {
        parent::__construct([...])
    }
}

迄今为止进行的相当广泛的搜索都没有找到相关信息... https://wordpress.org/ideas/topic/passing-arguments-to-widget https://wordpress.org/ideas/topic/allow-ability-to-pass-parameters-when-registering-widgets 这个问题背后的逻辑是什么?
我们想要传递一个包含在先前类中注册的post_type名称、ACF '选项'页面id等的数组...该小部件将仅用于提供用户选择...
我们真的不想使用越来越多的全局变量 - 如果可能的话...
我们的逻辑是否相反了?小部件是先有鸡还是先有蛋?

[链接:将变量传递给继承类](http://stackoverflow.com/questions/30713073/pass-variables-to-extended-class) [链接:继承父构造函数](https://dev59.com/BXI-5IYBdhLWcg3w8NWB) - dj.cowan
1个回答

4
通过创建扩展小部件类的附加扩展,可以将属性发送到已注册的小部件。
/*
 * Standard WP_Widget
 * https://developer.wordpress.org/reference/classes/wp_widget/
 */
class Actual_Widget extends \WP_Widget {

    // WordPress WP_Widget Class 
    public function __construct($args) {

// do stuff with $args

        parent::__construct(
        // extend WP_Widget as per codex
        );
    }

}

/*
 * Args passed to WP_Widget Class __constuctor for processing
 */

class Temp_Widget extends Actual_Widget {

    public function __construct($args) {
        $this -> args = $args;
        parent::__construct( $this -> args );
    }

}

/*
 * Args passed via Action Hook to Temp_Widget Class
 */
add_action( 'widgets_init', function() {

    $args = array( 'chicken', 'fish' ); // Proceedural
    $args = $this -> args; // Or Class Properties

    $widget = new Temp_Widget( $args );
    \register_widget( $widget );
} );

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接