我使用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; ?>
答案 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();
?>