Отображение переменной, хранящейся в functions.php внутри виджета

Я пытаюсь отобразить переменную, которая хранится внутри моего файла functions.php – для вопроса эта переменная хранится как $test = 'test'; , Когда я использую echo $test внутри page.php, header.php или любого другого файла, значение возвращается, однако, когда я пытаюсь сделать то же самое внутри виджета (я использую плагин, который позволяет выполнять PHP внутри виджета) ничего случается.

Любые идеи относительно того, как я мог обойти это?

Виджет работает в разных областях, чем functions.php .

Вы можете использовать два разных подхода, чтобы обойти это.

  1. Сделайте переменную global (поместите ее в верхнюю область):

     // functions.php $GLOBALS['var_name'] = 'hello'; // widget echo $GLOBALS['var_name']; 

    Но это рискованно: любой другой скрипт может изменить переменную сейчас случайно, и очень сложно отладить это.

  2. Создайте специальный класс или функцию для переменной. Вы можете даже использовать один класс или функцию для хранения многих значений. Пример:

     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; } } 

    В your 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' );