使用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等等的数组,这些数据已在之前的类中注册...该小部件仅用于提供用户选择......
我们真的想避免使用越来越多的GLOBALS - 如果可能的话......
我们的逻辑是否倒退?小部件是否在鸡蛋之前?
答案 0 :(得分:2)
通过创建扩展窗口小部件类的附加扩展,可以将属性发送到已注册的窗口小部件。
/*
* 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 );
} );