使用AJAX触发时,如何保留archive.php循环过滤器



我已经完成了这个Getting Loopy教程,将帖子附加到我的Packer.js上布局,它在我的主页上运行得很好,但每当我尝试将它用于我的归档(archive.php)页面时,它都会继续加载所有帖子,而不是特定于该类别的帖子(或搜索查询等)。如何在使用AJAX触发WordPress的archive.php循环时保留其固有的过滤功能?

目前,我在archive.php页面上有一个标准的<?php while (have_posts()) : the_post();?>作为主循环,它正确地调用了前十二个类别的帖子。然后我一直在尝试使用第二个循环来附加额外的帖子。正如我之前所说,这会调用所有帖子(而不仅仅是类别)。我目前的尝试是在第二个循环中识别类别,但我似乎搞错了。相关的当前代码如下(未更改的代码在上面的教程链接上)。有什么想法吗?谢谢

页脚中的AJAX触发器脚本:

var pager = 1;
var archive_load_posts = function(){  
$.ajax({  
type       : "GET",  
data       : {pageNumber: pager},  
dataType   : "html",  
url        : "http://tay.is/designing/belmontvision/wp-content/themes/yamidoo/archive-more-loop.php",  
beforeSend : function(){},  
success    : function(data){  
var $data = $(data);  
$container.append( $data ) .packery( 'appended', $data );
heightcalc();
$container.packery();
}
});
};
$('.archive-load-more').click( function() {
archive_load_posts();
pager++;
});

档案的基础-more-loop.php:

<?php   require_once('../../../wp-load.php');   
$page = (isset($_GET['pageNumber'])) ? $_GET['pageNumber'] : 0;
$category = get_queried_object_id();
query_posts(array(  
'paged' => $page,
'cat' => $category
));  
while (have_posts()) : the_post(); ?>
<?php endwhile; ?>

AJAX请求表示对服务器的新请求。它不会在原始页面的"内部"执行。像get_queried_object()这样的东西不起作用,或者充其量会返回与原始页面不同的东西。

您必须显式地将任何信息传递给AJAX处理程序脚本——因为您使用的是GET,所以您需要将查询变量附加到这一行"http://tay.is/designing/belmontvision/wp-content/themes/yamidoo/archive-more-loop.php",这样它看起来更像这个"http://tay.is/designing/belmontvision/wp-content/themes/yamidoo/archive-more-loop.php?category=123"。这意味着您的archive_load_posts脚本需要找到类别或任何其他信息,并将其传递出去。

如果您直接将其打印到页脚,并且看起来可能是这样,那么您可以执行类似的操作可能工作:

$category = get_queried_object_id(); ?>
<script type="text/javascript">
var archive_load_posts = function(){  
$.ajax({  
type       : "GET",  
data       : {pageNumber: pager},  
dataType   : "html",  
url        : "http://tay.is/designing/belmontvision/wp-content/themes/yamidoo/archive-more-loop.php?category=<?php echo $category ?>",  
beforeSend : function(){},  
success    : function(data){  
var $data = $(data);  
$container.append( $data ) .packery( 'appended', $data );
heightcalc();
$container.packery();
}
});
};
</script><?php

问题:

  1. WordPress在"noConflict"模式下加载jQuery。$别名不会工作,尽管未发布的代码可能会纠正这一点
  2. 你完全忽略了WordPress AJAX API强制潜在的不可靠黑客require_once('../../../wp-load.php');。正确执行此操作的方法将是注册并将脚本入队,然后使用wp_localize_script将变量写入页面。要了解这是什么样子,请在wordpress.stackeexchange.com上查看这个答案(我的)

相关内容

  • 没有找到相关文章