Im WordPressでポストクエリを使用してもページネーションが機能していないのですが、問題があるのはわかりませんが、ここに私のコードがあり、それが正しく問題ないと思います。
それは私が次のページをクリックしたときにページがあることを示していますそれはページを更新し、まったく同じページだけで新しい結果を表示しません。
私のテーマのホームページになるために静的ページでそれを使うIm
<?php
$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
$post_query = query_posts(array(
'post_type' => 'cover', // You can add a custom post type if you like
'paged' => $paged,
'posts_per_page' => 1
));
?>
<?php if ( have_posts() ) : ?>
<?php
while ( have_posts() ) : the_post();
?>
<?php endwhile; ?>
///Pagination Function in Functions.php
<?php my_pagination(); ?>
<?php else: ?>
No Results
<?php endif; ?>
ページ付け関数
if ( ! function_exists( 'my_pagination' ) ) :
function my_pagination() {
global $wp_query;
$big = 999999999; // need an unlikely integer
echo paginate_links( array(
'base' => str_replace( $big, '%#%', esc_url( get_pagenum_link( $big ) ) ),
'format' => '?paged=%#%',
'current' => max( 1, get_query_var('paged') ),
'total' => $wp_query->max_num_pages
) );
}
endif;
この解決法は、ページ付け関数がfunctions.phpにあるということのために修正される必要があります。
私はReverie master theme(これは、基礎フレームワークを使用しています)を使用しています。
if( ! function_exists( 'reverie_pagination' ) ) {
function reverie_pagination() {
global $wp_query;
$big = 999999999; // This needs to be an unlikely integer
// For more options and info view the docs for paginate_links()
// http://codex.wordpress.org/Function_Reference/paginate_links
$paginate_links = paginate_links( array(
'base' => str_replace( $big, '%#%', get_pagenum_link($big) ),
'current' => max( 1, get_query_var('paged') ),
'total' => $wp_query->max_num_pages,
'mid_size' => 5,
'prev_next' => True,
'prev_text' => __('«'),
'next_text' => __('»'),
'type' => 'list'
) );
// Display the pagination if more than one page is found
if ( $paginate_links ) {
echo '<div class="pagination-centered">';
echo $paginate_links;
echo '</div><!--// end .pagination -->';
}
}
}
私はこの機能を以下のように修正しました。
if( ! function_exists( 'reverie_pagination' ) ) {
function reverie_pagination() {
global $wp_query, $another_query;
$big = 999999999; // This needs to be an unlikely integer
if ( is_front_page()) {
$myqueryis = $another_query;
$paged = ( get_query_var('page') ) ? get_query_var('page') : 1;
} else {
$myqueryis = $wp_query;
$paged = get_query_var('paged');
}
// For more options and info view the docs for paginate_links()
// http://codex.wordpress.org/Function_Reference/paginate_links
$paginate_links = paginate_links( array(
'base' => str_replace( $big, '%#%', get_pagenum_link($big) ),
'current' => max( 1, $paged ),
'total' => $myqueryis->max_num_pages,
'mid_size' => 5,
'prev_next' => True,
'prev_text' => __('«'),
'next_text' => __('»'),
'type' => 'list'
) );
// Display the pagination if more than one page is found
if ( $paginate_links ) {
echo '<div class="pagination-centered">';
echo $paginate_links;
echo '</div><!--// end .pagination -->';
}
}
}
変数$ another_queryは私のカスタムWP_Queryです。この質問作者は結果を得るために* query_posts *を使いましたが、私は* new WP_Query *を使いました。
そして、私がフロントページの内側で使ったことのあるクエリは、
$args = array(
'post_type' => 'post',
'post__not_in' => $do_not_duplicate,
'paged' => $paged,
);
$another_query = new WP_Query( $args );
同じページに複数のループがある場合(たとえばfront_page)、ページ付けが壊れることがあります。
同じクエリ名を使用して問題を解決しました。上記の例から、$myqueryis = $another_query;
を使用し、関数内で'total' => $myqueryis->max_num_pages,
を使用しました。また、次のようにquery argsとqueryを指定しました。
$args = array(
'post_type' => 'post',
'post__not_in' => $do_not_duplicate,
'paged' => $paged,
);
$another_query = new WP_Query( $args );
2番目のループの例
$secondargs = array(
'post_type' => 'post',
'post__not_in' => $do_not_duplicate,
'paged' => $paged,
'posts_per_page' => 2, // for testing purpose to see if pagination works properly
);
$another_query = new WP_Query( $secondargs );
そしておそらく3番目のループの例で
$thirdargs = array(
'post_type' => 'post',
'post__not_in' => $do_not_duplicate,
'paged' => $paged,
'posts_per_page' => 5, // for testing purpose to see if pagination works properly
);
$another_query = new WP_Query( $thirdargs );
これはpage/1 page/2 page/...に対しては正しく働きます。