0

我一直在研究这个Getting Loopy教程,将帖子附加到我的Packery.js 布局上,它在我的主页上运行良好,但每当我尝试将它用于我的存档 (archive.php) 页面时,它会继续加载所有帖子而不是特定于该类别的帖子(或搜索查询等)。如何在使用 AJAX 触发它时保留过滤 WordPress 的 archive.php 循环似乎固有的?

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

页脚中的 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++;
});

archive-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; ?>
4

1 回答 1

0

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.stackexchange.com 上的这个答案(我的)
于 2014-02-11T05:25:27.133 回答