【问题标题】:How to make an AJAX call in WP plugin on the front end如何在前端的 WP 插件中进行 AJAX 调用
【发布时间】:2016-06-11 07:12:54
【问题描述】:

我正在开发 WP 插件,当用户输入 ID 时,会收到针对 ID 的帖子。它在管理员方面工作正常。我已经按照this 示例通过AJAX 调用获取数据,但现在我试图在前端进行,任何人都可以输入ID 并获得结果。我已经删除了用于在管理员端创建页面的功能。现在我有 3 个函数名为:

  1. hello_word()
  2. ajax_script()
  3. ajax_handler()

我尝试使用以下钩子进行注册,但没有成功

  • add_action('admin_footer', 'ajax_script');
  • add_action('wp_ajax_my_action', 'ajax_script');
  • add_action('wp_ajax_nopriv_my_action', 'ajax_script');

hello_word() 函数包含文本字段和按钮的代码。 我从模板文件中调用hello_word() 函数并且它正在正确显示,但是当我单击按钮时AJAX 不起作用。我发现的问题是ajax_script() 没有加载,并且在源代码的调试模式下单击按钮时什么也没有。

那么当我从模板文件中调用hello_word() 时,如何正确加载ajax 函数?

【问题讨论】:

    标签: javascript jquery ajax wordpress


    【解决方案1】:

    你把事情搞混了。

    add_action( 'wp_ajax_my_action', 'your_handler' );add_action( 'wp_ajax_nopriv_my_action', 'your_handler' ); 用于添加函数,分别处理登录用户和访客用户对 ajax 调用的响应。

    add_action( 'wp_footer', 'ajax_script' ); - 页脚的前端操作是wp_footer,只有当您的主题实际调用它时才会起作用。但更好的做法是为您的插件创建一个包含所有 js 的单独 .js 文件,而不是内联输出。
    要将您的脚本加入队列,您可以使用以下代码

    function enqueue_assets()
    {
        wp_enqueue_script('your_plugin_js', plugins_url('/my.js', __FILE__), array('jquery'), false, true); //true will put it into the footer
        wp_localize_script('your_plugin_js', 'your_plugin_ajax_object', array('ajax_url' => admin_url('admin-ajax.php', ((is_ssl()) ? 'https' : 'http')))); // your url for ajax call wil be available as your_plugin_ajax_object.ajax_url
        //wp_enqueue_style('your_plugin_css', plugins_url('/my.css', __FILE__)); // you can output css here too if you want
    }
    add_action('wp_enqueue_scripts', 'enqueue_assets');
    

    你可以在任何你喜欢的地方调用你的hello_world函数。

    【讨论】:

    • 如果我将所有 js 代码放在单独的文件中并入队脚本,在简单的调用函数 hello_word 之后,ajax 将正常工作,或者我必须做更多的事情?
    • 我想如果我调用 hello_word 函数,那么只有这个函数会被执行而不是其他函数,或者该文件中的所有代码都会被执行?
    • @coder hello_world 应该只返回用户输入的内容。如果您在 say paste bin 上向我展示所有 3 个功能的代码,我会更正需要更正的内容,如果您不明白,我会解释。
    • 实际上它在管理方面工作得很好,在这里你可以看到原始代码pastebin.com/XvMUsfjy 我只是对上面的前端用户进行了一些更改,但它不起作用
    • 如果你想保留内联 js 看起来不错,但你必须定义 ajaxurl 因为在前端它将是未定义的。如果你想让它也为客人工作,请添加add_action( 'wp_ajax_nopriv_dobsondev_ajax_tester_approal_action', 'dobsondev_ajax_tester_ajax_handler' );
    猜你喜欢
    • 1970-01-01
    • 2014-11-09
    • 1970-01-01
    • 2019-07-22
    • 2017-11-26
    • 1970-01-01
    • 1970-01-01
    • 2013-01-11
    • 2022-01-21
    相关资源
    最近更新 更多