我试图将来自shortcode属性的数据存储在class属性中,以便稍后在其他函数中使用它。但不知何故,我总是以房产的初始价值来结束。下面是一个简化的示例来展示我的问题:
class ScopeTestClass {
public $my_var = null;
function __construct() {
// The calls to add_action() go here
// I\'ve omitted them for this example to avoid cluttering up the code
add_shortcode( \'my_shortcode\', array($this, \'my_shortcode_handler\'));
}
function register_scripts() {
wp_register_script(\'some_script\', plugin_dir_url(__FILE__) .
\'/js/some_script.js\', array(\'jquery\'), \'1.0\', true);
public function my_shortcode_handler() {
$this->my_var = \'yeeha!\';
wp_enqueue_script(\'some_script\');
wp_localize_script( \'some_script\', \'somescript\', array(
\'ajax_url\' => admin_url( \'admin-ajax.php\' )));
}
public function ajax_handler() {
// This function handles the ajax call from some_script.js.
// When evaluating $this->my_var here, it is null.
}
}
$test_obj = new ScopeTestClass();
而
my_var
正确设置为“yeeha!”在shortcode函数中
ajax_handler()
它显示为null的函数。这是一个范围问题吗?我认为这可能是因为shortcode和ajax处理函数都是从对象上下文外部调用的,因此
$this
不指向
test_obj
, 但我读过的其他问题和文章似乎没有这个问题。所以我的问题是什么?