已解决-$wp_admin_bar和AJAX调用

时间:2018-11-12 作者:middlelady

我的课堂上发生了一些奇怪的事情。基本上我是想操纵$wp_admin_bar 通过AJAX,但当我收到响应时,我得到一个空值。虽然在初始化方法时调试全局,但我得到了正确的值。

我的班级:

class my_class(){

   var $DefaultBar;
   public function __construct(){
      $this->initialise();
   }

   public function initialise(){
      add_action( \'wp_before_admin_bar_render\', array( $this , \'admin_bar_load\' )); //or admin_bar_menu
      add_action( \'wp_ajax_get_the_page\',  array( $this ,\'get_the_page\') );
   }

   public function admin_bar_load(){
      global $wp_admin_bar;

      //here I assign the value to the class variable declared before
      $GLOBALS[\'default_bar\'] = $wp_admin_bar;
      //if I var_dump here, I get all the values

   }

   public function get_the_page(){

      global $default_bar;

      ob_start();
      include \'inc/forms/my_page.php\';
      $response = ob_get_contents();
      ob_end_clean();
      wp_send_json($response);

   }
}
在我的页面中,使用操作调用get_the_page() 通过AJAX,在$(document).ready 然后我放置了:

<?php var_dump($default_bar); ?>
编辑/解决方案我意识到电话有时间问题。我只是改变了我的课堂逻辑。

1 个回复
SO网友:Tom J Nowell

PHP请求不是这样工作的,您不能在一个请求中设置变量,然后在另一个请求中读取它。它不像节点或Python应用程序那样,程序在后台连续运行,每个请求都是一张白板。

因此,要使其正常工作,在第一个请求中,您需要将其放置在第二个请求可以读取的位置,这有几个选项:

Cookies用户元由于是登录用户,跨会话持久化是有意义的,因此用户元似乎是最合理的选择,通过update_user_metaget_user_meta

结束