Intereting Posts
Как изменить порядок элементов в сообщении? Как получить размер файла вложения? Выпадающее меню для отображения последнего / популярного сообщения – Архивная страница Показать название таксономии Хранилище Favicon – какую папку следует использовать? Обработка больших данных N в WordPress Условная дополнительная корректировка Как изменить постоянные ссылки на использование другого домена и пути от того, где размещается блог? Есть ли способ инициировать автоматический импорт резервной копии WP для создания нового многосайтового сайта WP? Почему мой простой фильтр the_title не применяется? Предложения по созданию свадебного сайта в WordPress? Какие данные отправляются на / с сайтов с трекбэком или Pingback? создать родительский пост с помощью wp_insert_post echo или print_r в функции администратора Функция структурирования с привязкой registration_errors

Переменные класса не указаны на странице.

Я пытаюсь сделать некоторые из переменных из моего плагина доступными для экземпляра класса на моей странице. Но это не показывает правильные значения.

Вот соответствующая часть плагина:

class opi{ // version public $opi_version = "1.0"; public $mg = 0; //constructor public function opi(){ $this->__construct(); } public function __construct(){ add_action('init', array(&$this, 'o_check')); // ... } function o_check(){ if (is_user_logged_in()){ $this->mg = 4; } } } $opi = new opi; 

Если я поставлю echo $this->mg; как раз перед закрывающей скобкой в ​​функции o_check() , тогда она показывает 4 . Хорошо.

Теперь, если я поместил следующее в page.php, и я вошел в WordPress, я получаю результат 0 .

 <?php $pageopi = new opi; ?> <?php echo $pageopi->mg; ?> 

Любые идеи, в которых я ошибаюсь, пожалуйста?

Solutions Collecting From Web of "Переменные класса не указаны на странице."

Когда вы пишете этот код

 <?php $pageopi = new opi; ?> // 1. object created // 2. __construct is called // 3. init action hook is set but is never executed so is o_check method <?php echo $pageopi->mg; ?> 

На этом этапе init hook выполнялся долгое время до того, как $pageopi создается фактически, когда страница загружена. init action hook выполняется даже до page.php запуска page.php .

Решение:

  1. Вы должны использовать global $opi; object page.php вместо создания нового.

  2. Или создайте новый глобальный объект перед plugins_loaded action (в plugins_loaded hook) и используйте его на page.php

Ну, вы не выполняете o_check в своем page.php , поэтому значение переменной mg остается равным нулю.

Да, в вашем конструкторе вы добавляете крюк действия, но он будет только нажимать на обновление следующей страницы. Подумайте также об использовании do_action , хотя я не уверен, что если он будет выполняться, то сразу другой будет работать.

Если вы добавите эту часть:

 <?php $pageopi = new opi; ?> <?php echo $pageopi->mg; ?> 

в шаблоне темы он будет инициализировать объект после init крючка init и поэтому метод o_check никогда не будет запущен. Это проблема. Вот почему он работает, если вы инициализируетесь под объектом, но не при инициализации в шаблоне страницы. Вам нужно сменить крючки или инициализировать ранее, или явно вызвать o_check .

Инициализация вашего объекта как global будет работать.

 class opi{ // ... } global $opi; $opi = new opi; 

Затем в шаблоне вы можете использовать:

 global $opi; echo $opi->mg; 

Хотя способ использования этого статического класса может также или лучше. Сложно сказать. Я не могу сказать, какова конечная цель класса.