Post will not load via ajax

时间:2011-10-17 作者:codecowboy

我继承了一个WP 3.2.1网站,该网站使用prettyPhoto 通过ajax加载内容。在我在站点上启用permalinks之前,这是可行的。已安装自定义Post类型UI插件。我可以在mysite浏览到我的自定义帖子类型。com/story/story的名称,但通过ajax加载会导致404。

触发$的链接。在Prettypo中获取如下代码:

<a href="<?php echo get_permalink(); ?>&ajax=true&count=<?php echo $count ?>" rel="story[ajax]"><?php echo wp_get_attachment_image($attachment->ID, array(75, 75));?></a>
如果我将永久链接设置更改回“默认”。帖子内容将加载到弹出窗口中。在工作时通过XHR调用的HREF如下所示:

http://mysite.com/?story=name-of-story&ajax=true&count=37

我尝试从永久链接URL中删除所有查询参数,但这并没有解决问题。有人能解释一下这里可能发生的事情吗?

1 个回复
最合适的回答,由SO网友:chrisguitarguy 整理而成

所有ajax请求都应该通过handy/wp-admin/admin-ajax.php 文件

它与伟大的WP挂钩系统配合使用。因此,您在请求中发送一个“操作”,并将其作为操作的一部分,将函数挂接到该操作中。

那么,假设您的ajax调用如下所示(使用jQuery)

jQuery(\'a.ajax\').click(function(e){
    data = {
        \'action\': \'wpse31321_action\',
        \'story\': 1 // IDs are easier to deal with...
    }
    jQuery.get(
        \'http://www.yoursite.com/wp-admin/admin-ajax.php\',
        data,
        function(resp){
            // do stuff with the response.
        }
    );

    e.preventDefault();
});
然后,在您的函数中。php文件或插件,您需要连接到wp_ajax_wpse31321_actionwp_ajax_nopriv_wpse31321_action. 这是完成这项工作的部分:您可以访问挂钩函数中的完整WP api。获取帖子,随便什么。

wp_ajax_[some_action] 用于登录用户。wp_ajax_nopriv_[some_action] 是给其他人的。[some_action] 当然,是您随请求一起发送的操作。wpse31321_action 在我们的示例中。

<?php
add_action( \'wp_ajax_wpse31321_action\', \'wpse31321_ajax\' );
add_action( \'wp_ajax_nopriv_wpse31321_action\', \'wpse31321_ajax\' );
function wpse31321_ajax()
{
    // you have access to $_REQUEST, $_POST and $_GET here...
    if( isset ( $_REQUEST[\'story\'] ) )
    {
        $story = get_post( (int) $_REQUEST[\'story\'] );
        if( ! $story ) die( \'-1\' );
        echo $story->post_content;
        die(); // Always kill the script after echoing out what you need.   
    }
    else
    {
        die( \'-1\' );
    }
}
在回显数据之前,您可以执行任何操作。以上是一个非常简单的答案,没有太多的错误检查或内置的安全性。但这应该让你开始。

进一步阅读:

http://wpajax.com/

http://codex.wordpress.org/AJAX_in_Plugins

http://codex.wordpress.org/AJAX

结束

相关推荐

通过AJAX加载页面并显示标题

一次小规模的、可能很简单的咨询。我通过Ajax加载页面,如下所示:jQuery(\"div.menu a\").addClass(\"ajax\"); var hash = window.location.hash.substr(1); var href = jQuery(\'.ajax\').each(function(){ var href = jQuery(this).attr(\'href\'); if(hash==href.substr(