Intereting Posts
Фиксирование wpdb-> get_results и wpdb-> подготовка? Почему я не вижу «Виджеты» в моем меню «Явление»? Пользовательская функция wp_get_archives отключена с момента обновления до WP 3.7.1 Добавить несколько продуктов в корзину woocommerce Получить сообщения в категории с SQL Уменьшение количества запасов при продаже варианта с использованием Woocommerce как отключить классы меню по умолчанию Пользовательский URL для пользовательских типов сообщений Пользовательские переменные не передаются Почему мой заказ меню не работает с wp_nav_menu? Как распечатать необработанный запрос из класса WP_Query, как в CodeIgniter страница блога, показывающая только первое сообщение пользовательский загрузчик в области администратора Невозможно загрузить носитель, и я получаю «PHP Warning: неверный аргумент, предоставленный для foreach (" Детская тема показывает пустую страницу

Доступ к защищенному объекту сообщения

Неустранимая ошибка : невозможно получить доступ к защищенному свойству Some_Plugin :: $ _ some_property

Каков наилучший / наименее разрушительный способ доступа к защищенному объекту, прикрепленному к сообщению.

Свойство прикрепляется к сообщению плагином, но мне нужно получить доступ к его сохраненной информации для отображения.

Возможные варианты:

  1. Изменение кода подключаемого модуля. Я не очень хорошо знаком с объектно-ориентированным PHP, поэтому я не решаюсь сделать это, чтобы не повредить функциональность.
  2. Как-нибудь вызовите плагин, чтобы я был в правильном контексте для получения информации (возможно, с функцией в functions.php)
  3. Напишите функцию, которая перехватывает публикацию этого типа сообщения и дублирует информацию в новое, незащищенное свойство сообщения.

Есть ли у кого-нибудь предложения или примеры кода, иллюстрирующие лучший способ сделать это. Если вам нужна дополнительная информация, просто комментируйте, и я обновлю вопрос.

Благодаря!

Solutions Collecting From Web of "Доступ к защищенному объекту сообщения"

Для защиты динамической переменной-члена нужно использовать дуплексный метод, чтобы использовать отражение!

Допустим, у нас есть этот класс:

class MyClass { private $myProperty = true; } 

Мы можем использовать отражение для приобретения класса, а свойство:

 $class = new ReflectionClass("MyClass"); $property = $class->getProperty("myProperty"); 

Затем мы можем установить это свойство в доступное:

 $property->setAccessible(true); 

Теперь мы можем получить доступ к переменной частного члена, используя новый объект $property :

 $obj = new MyClass(); echo $property->getValue($obj); // Works 

Обратите внимание, что переменная-член остается частной, если мы обращаемся к ней напрямую:

 echo $obj->myProperty; // Error 

Однако ваш код подразумевает статическую переменную-член, например:

 class Some_Plugin private static $_some_property; } 

Что это может не сработать

Спасибо @TomJNowell, я не закончил использовать класс отражения, но у вашего ответа было достаточно информации о классах, чтобы получить меня на правильном пути. Мои шаги были такими.

Я искал php-файлы каталога плагина для строк, содержащих свойство, которое я хотел использовать в своем шаблоне.

 grep --include=\*.php -rnw '/path/to/plugin' -e "_some_property" 

Я просмотрел строки и в итоге нашел свойство, которое называется вроде такого:

 $property = Plugin_Registry::instance()->load_model('Someproperty' )->get_property( $post_id ); 

В моем файле шаблона я затем тестировал, чтобы получить доступ к классу Plugin_Registry .

 class_exists(Plugin_Registry) // = 1 

Затем мне удалось просто скопировать эту строку непосредственно в мой шаблон и получить все свойства, которые я искал.