Intereting Posts
Безопасное редактирование файлов ядра Как включить файл для администратора и 2 страницы без загрузки на другие части сайта? 2 домена 1 Установка WP в Cpanel Изменение размеров изображения для темы для мобильных устройств Дублировать сайт WordPress в подкаталог, но использовать тот же db? Идеи подключения внешней таблицы базы данных к сообщениям WordPress в качестве настраиваемого источника поля Как выбрать пользовательский тип «верхнего уровня» в редакторе? Сбор адресов электронной почты через бета-форму регистрации Как создать персонализированный листинг сообщений в админ? Ограничение страницы и перенаправление для отдельных уровней или пользователя как ограничить и отобразить тег? Где контейнер слияния-gmap? что является лучшим способом добавить вещи в боковую панель Получать post_type от term_id Добавить роль и изменить возможности страницы

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

Неустранимая ошибка : невозможно получить доступ к защищенному свойству 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 

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