В настоящее время я использую следующий общий поток для добавления шорткода для плагина.
class MyPlugin {
private $myvar;
function baztag_func() {
print $this->myvar;
}
}
add_shortcode( 'baztag', array('MyPlugin', 'baztag_func') );
Теперь, когда этот класс и его метод вызваны, я получаю следующую ошибку.
Неустранимая ошибка: использование $ this, когда не в контексте объекта в ...
(Строка №, где я напечатал $this->myvar
)
Это проблема на стороне WordPress или я что-то не так делаю? Кажется, что-то действительно простое.
plugin-development
shortcode
oop
xmaestro
источник
источник
static
.Ответы:
Как говорит ошибка, вам нужен экземпляр класса для использования
$this
. Есть как минимум три возможности:Сделай все статичным
Но это уже не настоящий ООП, просто пространство имен.
Сначала создайте реальный объект
Это работает. Но вы столкнетесь с некоторыми неясными проблемами, если кто-то захочет заменить шорткод.
Поэтому добавьте метод для предоставления экземпляра класса:
Теперь, когда кто-то хочет получить экземпляр объекта, ему нужно написать:
Старое решение: создать объект в вашем классе
источник
NULL === self::$instance and self::$instance = new self;
? Я немного запутался, потому что===
иand
используется, но безif
, если вы понимаете, о чем я.Вы можете использовать как это, короткий код внутри класса
Если вы хотите получить доступ к шорткоду из другого класса. Вы можете сделать это так.
источник
Убедитесь, что вы создаете экземпляр своего класса перед его использованием, если вы не уверены, что он должен вызываться статически. Когда вы вызываете метод статически, вы не используете никаких экземпляров, и поэтому он не имеет доступа ни к каким переменным или методам-членам.
источник