在小部件内部显示存储在unctions.php中的变量

时间:2014-02-07 作者:Nikki Mather

我试图显示存储在函数中的变量。php文件-为了回答这个问题,这个变量存储为$test = \'test\';. 当我使用echo $test 内页。php,标题。php或任何其他文件返回值,但当我尝试在小部件内执行相同操作时(我使用的插件允许在小部件内执行php),什么都不会发生。

有什么办法可以绕过这件事吗?

1 个回复
最合适的回答,由SO网友:fuxia 整理而成

小部件以不同的方式运行scopefunctions.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\' );

结束

相关推荐

高级定制字段中的PHP回声剥离格式

使用Wordpress中的高级自定义字段,我有以下代码:if(the_sub_field(\'company_name\')) { echo \'<strong>Company name:</strong>\'; echo \'<p>\' . the_sub_field(\'company_name\') . \'</p>\'; } 当页面呈现时,公司名称呈现(子字段),但Company name: