小部件的构造函数在小部件注册时调用,因此add_action
在(可能)每个请求上调用。你可以避免这种情况,简单地说add_action
在…内widget()
函数,该函数仅在打印小部件时调用,因此无需检查:只需输出所需内容。
此外,如果您需要footer
方法中使用闭包widget
方法,您可以轻松访问$args
和$instance
变量(第一个包含关于侧栏和小部件id的信息,第二个包含关于为特定小部件设置的字段的信息):
class CustomWidget extends WP_Widget {
function __construct() {
parent::__construct( \'my-widget-id\', \'My Widget Name\' );
}
function widget( $args, $instance ) {
add_action( \'wp_footer\', function() use ( $args, $instance ) {
echo \'<h1>\' . $args[\'widget_id\'] . \'</h1>\';
echo \'<pre>\'; print_r( $instance ); echo \'</pre>\';
echo \'<pre>\'; print_r( $args); echo \'</pre>\';
echo \'<hr>\';
});
}
function update( $new_instance, $old_instance ) {}
function form($instance) {}
}
这使得在小部件添加到页面的所有时间都会关闭,即如果小部件添加了3次,则关闭将运行3次。
如果要防止出现这种情况,请使用静态标志:
class CustomWidget extends WP_Widget {
static $added = 0;
function __construct() {
parent::__construct( \'my-widget-id\', \'My Widget Name\' );
}
function widget( $args, $instance ) {
add_action( \'wp_footer\', function() use ( $args, $instance ) {
if ( static::$added !== 0 ) return; // run only once;
static::$added++;
echo \'<h1>\' . $args[\'widget_id\'] . \'</h1>\';
echo \'<pre>\'; print_r( $instance ); echo \'</pre>\';
echo \'<pre>\'; print_r( $args); echo \'</pre>\';
echo \'<hr>\';
});
}
function update( $new_instance, $old_instance ) {}
function form($instance) {}
}
PHP 4很久以前就死了。请使用
PHP 5 constructors...