带有自定义查询的Wordpress分页在每个页面上加载相同的内容

时间:2014-06-23 03:43:42

标签: php loops pagination wordpress

我使用2个自定义查询在自定义Wordpress模板主页上加载帖子。 第一个查询加载4' sticky'帖子,下一个查询会加载几个最近的帖子。

这很有效,可以做我需要做的事情,但点击时的分页链接会在每个页面上显示相同的内容。

例如,我在主页上有10个帖子,当我点击第2页时 - 完全相同的10个帖子再次出现。如果我点击分页访问第3页,再次发布相同的10个帖子等。 无论我在哪个页面,都会列出相同的10个帖子。

我已经阅读了有关被分页需要的内容,但是在我的下面的代码中包含了一些失败的尝试已经让我感到困惑。

任何想法都赞赏!

我的代码......

<?php $sticky = get_option( 'sticky_posts' );
$args = array(
'posts_per_page' => 4,
'post__in'  => $sticky,
'ignore_sticky_posts' => 1,
); ?>

<?php $the_query = new WP_Query( $args ); ?>

<?php if ( $the_query->have_posts() ) : ?>

<?php while ( $the_query->have_posts() ) : $the_query->the_post(); ?>
<a href="<?php the_permalink() ?>"<?php the_title(); ?>"></a>
<?php endwhile; ?>

<?php wp_reset_postdata(); ?>

<?php else:  ?>
<p><?php _e( 'Sorry, no posts matched your criteria.' ); ?></p>
<?php endif; ?>

<main id="main" class="site-main" role="main">

<?php $the_query = new WP_Query( array( 'post__not_in' => get_option( 'sticky_posts' ) ) );
if ( $the_query->have_posts() ) : while ( $the_query->have_posts() ) : $the_query->the_post(); ?>

<?php get_template_part( 'content', get_post_format() ); ?>

<?php endwhile; ?>
<?php else : ?>
<?php get_template_part( 'content', 'none' ); ?>
<?php endif; ?>

1 个答案:

答案 0 :(得分:1)

您确定需要$paged参数(docs)。未经测试但是试一试:

<?php
// $paged holds the current page offset
$paged = ( get_query_var('paged') ) ? get_query_var( 'paged' ) : 1;

/**
 * - Checks if the current page is 'paged' (false on first page)
 * - Remove the check if you need those sticky posts on all pages
 * - I added the $paged parameter so those sticky posts will paginate 
 *   if you decide to show them on all pages
 * 
 */
if( ! is_paged() ) { // Sticky posts only on first page
    $sticky = get_option( 'sticky_posts' );
    $args = array(
        'posts_per_page' => 4,
        'post__in'  => $sticky,
        'ignore_sticky_posts' => 1,
        'paged' => $paged // ah, the page offset
    );
    $the_query = new WP_Query( $args );
    if ( $the_query->have_posts() ) {
        while ( $the_query->have_posts() ) {
            $the_query->the_post();
            ?>
            <a href="<?php the_permalink() ?>"><?php the_title(); ?>"></a>
            <?php
        }
    } else {
        ?>
        <p><?php _e( 'Sorry, no posts matched your criteria.' ); ?></p>
        <?php
    }
    wp_reset_postdata();
}
?>

<main id="main" class="site-main" role="main">

    <?php
    $args = array(
        'post__not_in' => get_option( 'sticky_posts' ),
        'paged' => $paged // ah, the page offset
    );
    // can be done via new WP_Query but today I am lazy
    // also see http://codex.wordpress.org/Function_Reference/query_posts
    query_posts($args);
    if ( have_posts() ) {
        while ( have_posts() ) {
            the_post();
            get_template_part( 'content', get_post_format() );
        }
    } else {
        get_template_part( 'content', 'none' );
    }
    wp_reset_query();
    ?>