1

在我的 funcitons.php 文件中,我有响应 ajax 调用并返回帖子的函数:

函数.php:

function returnPosts(){
if ( have_posts() ) {
        while ( have_posts() ) {
            the_post();
            get_template_part('content', get_post_format());
        }
    } else { 
        get_template_part( 'content', 'none' );
    }
exit();
}

add_action('wp_ajax_returnPosts', 'returnPosts');
add_action('wp_ajax_nopriv_returnPosts', 'returnPosts');

Javascript(在 index.php 中):

jQuery.ajax({
    type:"POST",
    url: "<?php echo admin_url("admin-ajax.php"); ?>",
    data: {"action": "returnPosts"},
    success:function(results){
        // Work with results
    }
});

但是当我通过 JS 调用这个函数时,我总是从 content-none.php 文件中获取内容。

4

2 回答 2

4

看起来您假设 AJAX 调用将知道页面上已经显示了什么帖子,因为您正在检查 have_posts() 而不创建自己的 WP_Query。但是 AJAX 调用是作为一个单独的 HTTP 请求进来的,它所知道的关于前一页的唯一事情就是你告诉它的事情。

除了在 AJAX 调用中传递您的“动作”名称之外,请尝试传递当前帖子的 ID。我没有在真正的计算机前进行测试,但是假设您在输出该 jQuery 代码时位于循环内,这应该可以工作:

data: {"action": "returnPosts", "p": "<?php the_ID(); ?>"},
于 2013-09-21T13:20:57.827 回答
-2

快速解决方法是:

include("../../../wp-load.php");<-- 猜测 wordpress 文件的位置。

在 php 文件的顶部。

于 2013-09-21T09:35:29.673 回答