2016-09-20 95 views
0

使用register_widget()函数时是否可以将其他参数传递到自定义的Wordpress构件中? register_widget只有一个参数 - 目标类名称。通过register_widget动作钩子将参数传递给WP_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,等等等等,这是在以前的类注册...部件将只用于供用户选择...

我们真的想要避免使用越来越多的全球 - 如果这是可能的...

我们有逻辑倒退吗? widget是否在鸡蛋前面出现?

+0

[链接:通瓦尔到继承的类(http://stackoverflow.com/questions/30713073/pass-variables-to-extended-class) [链接:继承父构建体]的http:// stackoverflow.com/questions/1603469/php-how-to-pass-child-class-construct-arguments-to-parent-construct –

回答

0

通过创建扩展小部件类的附加扩展,可以将属性发送到已注册的小部件。

/* 
* 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); 
}); 
+0

这是正确的,但只能从wp 4.6 – omxv

相关问题