WordPress的; Ajax请求中的PHP函数无法正常工作。另类?

时间:2012-03-16 05:04:00

标签: php jquery ajax wordpress

当用Ajax(在我的Wordpress主题中)调用PHP页面时,PHP echo 'Hello World!';工作正常,但调用其他Wordpress PHP函数,如get_bloginfo();,该函数返回undefined。是否可以在ajax调用中使用Wordpress函数?还有什么其他选择..我知道iframe可能有用。我正在尝试加载一个输出插件功能的页面。

弹出的错误是{致命错误:在...中调用未定义函数get_bloginfo()}

4 个答案:

答案 0 :(得分:2)

我没有测试它,使用插件尝试下面的一些事情

<?php
/**
 * Plugin Name:  Blog information
 * Plugin URI: http://www.test.com/
 * Description: Displays Blog information
 * Version: 1.0
 * Author: your_name
 * Author URI: http://www.test.com/
*/
// Function for handling AJAX requests
function getblog_request_handler() {

    // Check that all parameters have been passed
    if ((isset($_REQUEST['request']) && ($_REQUEST['request'] == 'getblog_Action'))) {
        // Output the response from your call and exit
        echo get_bloginfo();
        exit();
    }
    elseif (isset($_REQUEST['request']) && ($_REQUEST['request'] == 'getblog_Action'))   {
        // Otherwise display an error and exit the call
        echo "Error: Unable to display request.";
        exit();
    }

}

// Add the handler to init()
add_action('init', 'getblog_request_handler');

?>

并使用JS调用插件函数来获取响应,

....

        jQuery.ajax({
            type    : "POST",
            url     : "index.php",
            data    : { 
                        request    : "getblog_Action"
                      },
            success : function(response) {
                                   alert(response);
                //jQuery(".blog_name").html(response);
                            }
        });  
....

如果您将此调用为ajax,您将使用ajax获取博客信息。

答案 1 :(得分:1)

实际上,您需要在WordPress中进行Ajax调用。 [编辑:我的意思是,有一种规定的方式;是否需要虔诚地遵循它或者是否还有其他方法来修饰猫是另一个故事]有很多教程(只需要对“Ajax WordPress”进行网络搜索并查找有关实现的文章,而不仅仅是现在Ajax是用来为它的后端供电)。

简短版本是:

你应该调用特定的处理程序'admin-ajax.php',你应该用POST来做。您传递的数据对象看起来像'action = someaction&amp; parameter = foo'。

然后你应该在functions.php中为“someaction”动作设置一个钩子。

还有更多内容,但我不认为这是教程的最佳位置。我只想说,你需要深入研究它;您不能像使用直接标记+ JavaScript页面那样进行Ajax调用。

但是可以做到。 WP中的联系表单通常基于Ajax,因此可能需要查看示例代码。

答案 2 :(得分:0)

像<{1}}这样的WP命令应该正常工作。

您确定已包含所有相应的wordpress标题(在响应脚本中)吗?

答案 3 :(得分:0)

我最近遇到了一种类似的问题,因为我无法使用$this->myMethod()调用方法,也无法使用$this->myVariable访问变量。似乎类没有被实例化,或者ajax方法的行为类似于静态方法,因此$this中不存在该类。尽管在调用此方法时确实确定了该类的实例化,并且类构造函数也在进行设置。

我能解决的解决方案是使其他变量和方法成为static,现在self::myMethod()self::$myVariable可以访问它们