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