【问题标题】:How to pass PHP values to js script in Wordpress using AJAX如何使用 AJAX 将 PHP 值传递给 Wordpress 中的 js 脚本
【发布时间】:2021-04-19 09:17:54
【问题描述】:

我已经尝试过 wp_localize_script 和 wp_add_inline_script :它没有按我预期的方式工作。

我的插件的 PHP 文件中有这个(它在其他地方与 wp_enqueue_scripts 一起排队,但我不需要在这里编写代码吗?):

        wp_register_script(
            'custom-profile-script',
            "{$this->plugin_url}js/custom-profile-plugin.js",
            array( 'jquery' ),
            null,
            false
        );

        wp_enqueue_script(
            'custom-profile-script'
        );

        wp_localize_script(
            'custom-profile-plugin',
            'wp_ajax',
            array( 
                'ajax_url' => admin_url( 'admin-ajax.php' ), 
                'ajaxnonce' => wp_create_nonce( 'ajax_post_validation' ),
                'plugin_url' => "url"
            )
        );
        wp_add_inline_script( 'custom-profile-plugin', 'const PHPVAR = ' . json_encode( array(
                'plugin_url' => "url"
        ) ), 'before' );

然后,在我的 js 文件中:

var data = {
        action: 'custom_user_plugin_update_meta_rating_value', 
        security: wp_ajax.ajaxnonce
    };

$.post(wp_ajax.ajax_url, data, function(result) {

        console.log(wp_ajax);
        console.log(PHPVAR.plugin_url);

});

第一个控制台日志(与 wp_localize_script 相关)是一个对象,其中包含具有正确值的“ajax_url”和“ajax_nonce”,但“plugin_url”没有出现,并且在我使用 wp_ajax.plugin_url 调用它时未定义。

第二个控制台日志(与 wp_add_inline_script 相关)告诉我 PHPVAR 未定义...

我不明白为什么前两个值使用本地化脚本正确传递,而第三个却没有,此外,为什么 wp_add_inline_script 不起作用。

【问题讨论】:

    标签: javascript php jquery ajax wordpress


    【解决方案1】:

    脚本需要在页脚中注册才能传递 PHP 值,如下所示:

    wp_register_script(
        'custom-profile-script',
        "{$this->plugin_url}js/custom-profile-plugin.js",
        array( 'jquery' ),
        null,
        true // register script in the footer
    );
    

    而不是:

    wp_register_script(
        'custom-profile-script',
        "{$this->plugin_url}js/custom-profile-plugin.js",
        array( 'jquery' ),
        null,
        false // default value of the wp_register_script function that registers script in header
    );
    

    【讨论】:

      【解决方案2】:

      您需要在wp_localize_script 之后添加wp_enqueue_script,并且您还为wp_localize_script 添加了错误的句柄,请检查以下代码。

      wp_register_script(
          'custom-profile-script',
          "{$this->plugin_url}js/custom-profile-plugin.js",
          array( 'jquery' ),
          null,
          true
      );
      
      wp_localize_script(
          'custom-profile-script',
          'wp_ajax',
          array( 
              'ajax_url' => admin_url( 'admin-ajax.php' ), 
              'ajaxnonce' => wp_create_nonce( 'ajax_post_validation' ),
              'plugin_url' => "url"
          )
      );
      
      wp_enqueue_script(
          'custom-profile-script'
      );
      
      var data = {
          action: 'custom_user_plugin_update_meta_rating_value', 
          security: wp_ajax.ajaxnonce
      };
      
      $.post(wp_ajax.ajax_url, data, function(result) {
          console.log(wp_ajax);
          console.log(wp_ajax.plugin_url);
      });
      

      【讨论】:

      • 感谢您的回复。我尝试将 wp_enqueue_script 放在本地化之后,但结果仍然相同: wp_ajax.plugin_url is undefined...
      • 好的,我找到了解决方案,您通过谈论声明顺序明确地让我走上了正轨:需要使用 enqueue_script 函数中的 true 参数将脚本添加到页脚。我将编辑我的问题以写出答案
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-14
      • 1970-01-01
      • 2013-06-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多