2016-09-20 100 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

相關問題