WP_QUERY偏移量正在从PROVIS循环返回POST

时间:2018-04-07 作者:Vincurekf

在归档页面上,我让WordPress处理归档页面并加载前10篇文章,然后用AJAX请求加载更多的文章,这个AJAX请求返回了奇怪的结果。

我在AJAX处理程序中的查询如下所示:

$query_args = array(
    \'post_type\' => \'post\',
    \'posts_per_page\' => get_option( \'posts_per_page\' ), // 10 by default
    \'offset\' => get_option( \'posts_per_page\' ), // 10 by default
    \'cat\' => 8 // the category ID
);
$wp_query_archive = new WP_Query( $query_args );
The problem: 如果AJAX查询的帖子数小于10,则会得到一篇重复的帖子。

如果帖子已编号,则第一个查询(返回所选类别中前10篇帖子的默认存档查询)将返回:1,2,3,4,5,6,7,8,9,10, 由AJAX请求进行的第二个查询(如上所述)返回:10,11. 这将导致前端的后期复制。

但是,如果AJAX查询有10个或更多帖子,查询将返回:11,12,13,14,15,16,17,18,19,20

如果AJAX查询仅返回一篇文章,则查询仅返回该篇文章:11, 没错,但当有两篇文章要返回时,查询将返回:10,11,12.

当AJAX查询有5篇帖子时,查询也会返回正确的帖子,这意味着:11,12,13,14,15

有什么魔法可以WP_Query() 这就是为什么它会这样?

Addition: 我不能使用paged 正如JacobPeattie指出的,查询参数是因为当用户点击页面时,我使用该查询从多个“页面”加载帖子hash 例如,包含字符串“#page3”。

2 个回复
SO网友:Vincurekf

修复了它。毕竟我犯了个愚蠢的错误。这个WP_Query() 默认情况下不过滤未发布的帖子。内部归档页面查询会过滤掉这些帖子。

我不得不补充\'post_status\' => \'publish\'$query_args 数组和所有内容现在都按预期工作。

最后的查询如下所示:

$query_args = array(
    \'post_status\' => \'publish\'
    \'post_type\' => \'post\',
    \'posts_per_page\' => get_option( \'posts_per_page\' ), // 10 by default
    \'offset\' => get_option( \'posts_per_page\' ), // 10 by default
    \'cat\' => 8 // the category ID
);

SO网友:Jacob Peattie

只需使用paged 获取第二页(或第三页或第四页等)的参数:

$query_args = array(
    \'post_type\' => \'post\',
    \'paged\'     => 2,
    \'cat\'       => 8
);
$wp_query_archive = new WP_Query( $query_args );
如果您在JS中跟踪您所访问的页面,那么您可以直接将该页码传递到paged 获得正确的职位。

附言:你错过了一个> 对于cat 参数,如果要按ID获取类别,则应使用整数。在我的示例中,我已经纠正了这两个问题。

编辑:如果需要在初始加载时根据URL哈希一次处理多个页面,请在AJAX中使用不同的参数来处理:

$query_args = array(
    \'post_type\' => \'post\',
    \'cat\'       => 8
);

if ( isset( $_GET[\'pages\'] ) ) {
    $query_args[\'posts_per_page\'] = $_GET[\'pages\'] * get_option( \'posts_per_page\' );
} else if ( isset( $GET[\'page\'] ) ) {
    $query_args[\'paged\'] = $_GET[\'page\'];
}

$wp_query_archive = new WP_Query( $query_args );
然后在JS中,如果希望一次发送多个页面pages 与你想要的文章的页数相当,但当加载更多时发送page 使用您要查找的特定页码。

结束

相关推荐

自定义WP_QUERY循环中的AJAX无限滚动无法工作

我已经为页面模板设置了一个自定义WP\\U查询循环。我通过ajax实现了一个无限滚动方法,调用成功,但由于某些原因,我无法让查询喜欢循环中的分页参数。它什么也拉不动。以下是我的ajax操作代码:// AJAX Infinite Scroll function txcap_ajax_scroll() { $args = isset( $_POST[\'query\'] ) ? array_map( \'esc_attr\', $_POST[\'query\