小部件以不同的方式运行scope 比functions.php
.
你可以使用两种不同的方法来解决这个问题。
将变量设为全局变量(将其置于顶部范围):
// functions.php
$GLOBALS[\'var_name\'] = \'hello\';
// widget
echo $GLOBALS[\'var_name\'];
但这是有风险的:任何其他脚本现在都可能意外更改变量,并且很难对此进行调试。
为变量创建特殊类或函数。您甚至可以使用一个类或函数来存储多个值。示例:
class Theme_Data
{
private $data = array();
public function __construct( $filter = \'get_theme_data_object\' )
{
add_filter( $filter, array ( $this, \'get_instance\' ) );
}
public function set( $name, $value )
{
$this->data[ $name ] = $value;
}
public function get( $name )
{
if ( isset ( $this->data[ $name ] ) )
return $this->data[ $name ];
return NULL;
}
public function get_instance()
{
return $this;
}
}
在您的
functions.php
, 现在可以创建对象并添加值:
$theme_data = new Theme_Data();
$theme_data->set( \'default_posts_in_news_widget\', 10 );
在小部件中,可以获取该对象和存储值:
// widget
$theme_data = apply_filters( \'get_theme_data_object\', NULL );
if ( is_a( $theme_data, \'Theme_Data\' ) )
$num = $theme_data->get( \'default_posts_in_news_widget\' );
else
$num = 5;
您甚至可以创建多个独立的
Theme_Data
用于不同目的的对象,只需使用不同的
$filter
字符串:
$widget_data = new Theme_Data( get_template() . \'_widgets\' );
$customizer_data = new Theme_Data( get_template() . \'_customizer\' );