5

我最近在创建即将发生的事件列表时得到了很多帮助(请参阅此处显示即将发生的事件(包括今天的事件)?),结果我使用 WP Pagenavi 的分页被破坏了。

目前,当您单击第 2 页时,它只会显示与第 1 页相同的帖子。尽管 URL 实际上确实更改为 page/2 page/3 等。

我的functions.php文件中有这个:

function filter_where( $where = '' ) {
    $where .= " AND post_date >= '" . date("Y-m-d") . "'";
    return $where;
}

add_filter( 'posts_where', 'filter_where' );

$query = new WP_Query(
    array(
        'post__not_in' => array(4269),
        'paged' => get_query_var('paged'),
        'post_type' => 'whatson',
        'exclude' => '4269',
        'post_status' => 'future,publish',
        'posts_per_page' => 20,
        'order' => 'ASC'
    )
);

remove_filter( 'posts_where', 'filter_where' );

我的循环如下:

<?php while ( $query->have_posts() ) : $query->the_post(); ?>
// content
<?php endwhile; // end of the loop.  ?>
<?php if (function_exists('wp_pagenavi')) { wp_pagenavi( array( 'query' => $query ) ); } ?>
4

3 回答 3

4

最后解决了这个问题:

function my_filter_where( $where = '' ) {
    global $wp_query;
    if (is_array($wp_query->query_vars['post_status'])) {

        if (in_array('future',$wp_query->query_vars['post_status'])) {
        // posts today into the future
        $where .= " AND post_date > '" . date('Y-m-d', strtotime('now')) . "'";
        }
    }
    return $where;
}
add_filter( 'posts_where', 'my_filter_where' );

和:

<?php
$wp_query = array(
        'post__not_in' => array(4269),
        'paged' => get_query_var('paged'),
        'post_type' => 'whatson',
        'exclude' => '4269',
        'posts_per_page' => 20,
        'order' => 'ASC',
        'orderby' => 'date',
        'post_status' =>array('future','published'));
query_posts($wp_query);
?>

<?php 
if ($wp_query->have_posts()) {
    while ( $wp_query->have_posts() ) : $wp_query->the_post(); ?>
        Content
    <?php endwhile; // end of the loop.
} ?>

<?php if (function_exists('wp_pagenavi')) { wp_pagenavi( array( 'query' => $wp_query ) ); } ?>
于 2013-07-03T15:29:18.263 回答
1

你想要它用于特定的帖子还是所有的帖子?如果您想要通用分页,您可以使用以下代码制作没有插件的分页链接:

<?php
 global $wp_query;
$big = 999999999; // need an unlikely integer
echo paginate_links( array(
 'base' => str_replace( $big, '%#%', get_pagenum_link( $big ) ),
 'format' => '?paged=%#%',
 'current' => max( 1, get_query_var('paged') ),
 'total' => $wp_query->max_num_pages
 ) );
 ?>

只需将它添加到您的 index.php 或 archives.php 中,看看神奇的事情发生了 :)

于 2013-06-30T19:39:27.237 回答
1

我不确定您的其余代码发生了什么,但是要尝试的一件事是一个简单的测试,那就是wp_reset_query()在您new WP_Query确保查询变量没有被修改之前使用它。

于 2013-06-30T19:43:18.657 回答