我如何在称为Ajax的php脚本中访问wordpress函数

我正在尝试从PHP脚本调用WordPress函数(get_avatar($ id)),该PHP脚本正在从排队的javascript文件的ajax引用调用中访问。(说这种负担已经使我的头受伤了)。


例如,我为WordPress创建了一个插件:hmm-test。它在hmm-test.php中实现。该脚本排队一个javascript文件:test.js。在js中,我有一个xhttprequest调用,该调用将POSTS调用到hmm-test.php,该分支会基于POST变量的测试。


当将hmm-test.php称为GET时,例如,使用嵌入了短代码的页面的WordPress URL,我可以调用WordPress函数。从POST分支,我还希望能够调用WordPress本机函数,并将其作为JSON有效内容的一部分返回。


所以我的问题是:我可以将hmm-test.php的'POST'分支设为'wordpress-aware'以便可以在其中调用本地WP函数吗?


我被卡住了-不知道还能尝试什么。我尝试尽早创建一个REST端点以通过Ajax URL进行调用,但一直遇到身份验证问题。如果这行得通,我可以花一些时间来完成它,但是我发现OAuth有点棘手。我让它为别的东西工作,但失去了它。如果有一种方法可以通过简单的POST完成,那对我的概念证明就足够了。


这是完整的插件PHP脚本和排队的javascript:


<?php

/*

Plugin Name:  HMM Test

*/


if (strlen($_POST['action'])) {


        $rv["payload"] = get_avatar(108);

        $rv["payload"] = "This is the payload message";

        $rv["status"]  = 'SUCCESS';

        echo json_encode($rv);


} else {


        function hmm_test_enqueue_scripts() {


                wp_register_script( 'test-js', plugins_url( '/js/test.js', __FILE__ ), '', '1.0', all );


        }


        add_action( 'wp_enqueue_scripts', 'hmm_test_enqueue_scripts' );


        /* ***************************************************************************

         * This is the main page

         * ************************************************************************* */


        add_shortcode( 'test-contents', 'my_test_contents' );

当我将简短代码[hmm-test]放置在Wordpress页面中时,它可以很好地加载,并且得到了预期的“ Wordpress功能测试...”,用户37的正确头像图片(在此示例中为硬编码),并且单击以使事情崩溃的按钮(现在!)。

单击按钮,我看到这是控制台窗口:

在doTest()中test.js?ver = 1.0:40调用网址: 带有arg的https://not-my-real-url.com/wp-content/plugins/hmm-test/hmm-test.php:action =更新&用户ID = 37个test.js版本= 1.0:30的responseText: 致命错误:电话中未定义的函数get_avatar() /home4/mifydnu/public_html/wp-content/plugins/hmm-test/hmm-test.php 上线8

显然,也许不足为奇,关于get_avatar()函数一无所知。这很有意义-我只是通过URL调用一些PHP脚本。脚本位于某个地方的Wordpress目录中没有任何区别。但是我为如何解决这个问题而感到困惑。


莫回无
浏览 131回答 2
2回答
打开App,查看更多内容
随时随地看视频慕课网APP