오류에 따르면 사용할 클래스의 인스턴스가 필요합니다 $this
. 최소한 세 가지 가능성이 있습니다.
모든 것을 정적으로 만드십시오
class My_Plugin
{
private static $var = 'foo';
static function foo()
{
return self::$var; // never echo or print in a shortcode!
}
}
add_shortcode( 'baztag', array( 'My_Plugin', 'foo' ) );
그러나 그것은 더 이상 실제 OOP가 아니며 단지 이름을 지정하는 것입니다.
실제 객체를 먼저 생성
class My_Plugin
{
private $var = 'foo';
public function foo()
{
return $this->var; // never echo or print in a shortcode!
}
}
$My_Plugin = new My_Plugin;
add_shortcode( 'baztag', array( $My_Plugin, 'foo' ) );
이것은 ... 작동합니다. 그러나 당신은 모호한 문제에 부딪칩니다. 누군가가 단축 코드를 교체하려면 합니다.
따라서 클래스 인스턴스를 제공하는 메소드를 추가하십시오.
final class My_Plugin
{
private $var = 'foo';
public function __construct()
{
add_filter( 'get_my_plugin_instance', [ $this, 'get_instance' ] );
}
public function get_instance()
{
return $this; // return the object
}
public function foo()
{
return $this->var; // never echo or print in a shortcode!
}
}
add_shortcode( 'baztag', [ new My_Plugin, 'foo' ] );
이제 누군가가 객체 인스턴스를 얻으려고 할 때 다음과 같이 작성하면됩니다.
$shortcode_handler = apply_filters( 'get_my_plugin_instance', NULL );
if ( is_a( $shortcode_handler, 'My_Plugin ' ) )
{
// do something with that instance.
}
오래된 해결책 : 클래스에서 객체 만들기
class My_Plugin
{
private $var = 'foo';
protected static $instance = NULL;
public static function get_instance()
{
// create an object
NULL === self::$instance and self::$instance = new self;
return self::$instance; // return the object
}
public function foo()
{
return $this->var; // never echo or print in a shortcode!
}
}
add_shortcode( 'baztag', array( My_Plugin::get_instance(), 'foo' ) );
static
합니다.