【问题标题】:Call any Wordpress PHP function via AJAX [duplicate]通过 AJAX 调用任何 Wordpress PHP 函数 [重复]
【发布时间】:2017-11-17 13:28:03
【问题描述】:

我很难学习 AJAX 的基础知识,因为我只能找到复杂的示例。事实上,我想做一件看似简单的事情,但我找不到任何简单的解决方案。有很多关于如何使用 AJAX 检查各种表格等的说明。但是关于该技术如何在 WordPress 中工作的数据很少。

官方指令对我也没有用: https://codex.wordpress.org/AJAX_in_Plugins

我到底需要什么?

例如,我在functions.php中有一些函数。让它成为一个简单的字符串:

<?php 

function do_echo() {

echo "Hello";

}

现在,我想在帖子中创建一个按钮并使用 AJAX 调用 do_echo()。

<button class="my_button" type="button" role="button">Click Me</button>

所以,我要做的第一件事就是按下按钮并获得“Hello, world!”。显示。

当然,其实我需要执行更复杂的功能。但是,首先,我需要做这些简单的事情。

我意识到我需要使用 jQuery 来做这样的事情

$.ajax({
url: '/path/to/file',
type: 'default GET (Other values: POST)',
dataType: 'default: Intelligent Guess (Other values: xml, json, script, 
or html)',
data: {param1: 'value1'},
})
.done(function() {
console.log("success");
})
.fail(function() {
console.log("error");
})
.always(function() {
console.log("complete");
});

我知道我需要在 PHP 中做这样的事情

add_action('wp_ajax_(action)', 'my_action_callback');
add_action('wp_ajax_nopriv_(action)', 'my_action_callback');

但我无法理解将这些内容附加到 WordPress 需要执行哪些具体步骤。

任何人都可以通过 simple 说明如何在单击按钮时使用 AJAX 从 WordPress 中的 functions.php 调用任何 PHP 函数吗?

提前谢谢你。

【问题讨论】:

    标签: php ajax wordpress


    【解决方案1】:

    好的,让我们为此编写简化示例。

    这是functions.php的示例:

    add_action('wp_ajax_nopriv_sayhello', 'say_hello_function');
    add_action('wp_ajax_sayhello', 'say_hello_function');
    function say_hello_function(){
    echo 'hello';
    exit();
    }
    

    这是前端部分:

    <button class="my_button" type="button" role="button">Click Me</button>
    
    <script>
    jQuery(".my_button").click(function(){
    
    jQuery.get(ajaxurl,{'action': 'sayhello'}, 
    function (msg) { alert(msg);});
    
    });
    
    </script>
    

    更新:

    在您的网站内容中显示返回的数据:

       <script>
        jQuery(".my_button").click(function(){  
        jQuery.get(ajaxurl,{'action': 'sayhello'}, 
        function (msg) { jQuery(".result_area").html(msg);});
        });
       </script>
    

    要使上述代码正常工作,您需要一个带有“result_area”类的 div。

    <div class="result_area"></div> 
    

    【讨论】:

    • 哦,对不起...我开始意识到)))
    • 在给定的例子中 add_action() 函数调用 say_hello_function;在第一行,您会看到 add_action('wp_ajax_nopriv_sayhello', 'say_hello_function'),对吗? add_action 是 WP Core 函数,它将第二个参数作为函数执行。
    • 可以这样解释:add_action('wp_ajax_nopriv_sayhello', 'say_hello_function') = 嘿 WP,当你从前端获取 action=sayhello GET 参数并返回时运行一个名为 'say_hello_function' 的函数它的输出到前端。
    • 是的,是的,对不起。我不专心!你是对的......
    • 我知道我需要在最后写一些类似 die() 的东西。不是吗?
    【解决方案2】:

    最好的做法是使用WP Rest API

    Wordpress 提供了一种简单而有条理的方式来添加返回 JSON 的 API 路由。

    您可以在function.php 或其他加载的文件中注册您的路线。

    将加载主要的 WP 文件,您可以使用您的功能。

    WP 示例:

    <?php
    /**
     * Grab latest post title by an author!
     */
    function my_awesome_func( $data ) {
      $posts = get_posts( array(
        "author" => $data["id"],
      ) );
    
      if ( empty( $posts ) ) {
        return null;
      }
    
      return $posts[0]->post_title;
    }
    
    add_action( "rest_api_init", function () {
      register_rest_route( "myplugin/v1", "/author/(?P<id>\d+)", array(
        "methods" => "GET",
        "callback" => "my_awesome_func",
      ) );
    } );
    

    【讨论】:

    • 你好,麦克斯韦!谢谢你的提示。我将学习 WP Rest API。也许这对我有用。
    • 如果您喜欢 OO,请查看 WP rest 类进行扩展。
    猜你喜欢
    • 2012-09-30
    • 2015-06-01
    • 2013-06-03
    • 1970-01-01
    • 1970-01-01
    • 2013-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多