web-dev-qa-db-ja.com

静的ページのページネーション

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;
2
Youssef Subehi

この解決法は、ページ付け関数が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' => __('&laquo;'),
        'next_text' => __('&raquo;'),
        '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' => __('&laquo;'),
            'next_text' => __('&raquo;'),
            '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 );
1
ewroman

同じページに複数のループがある場合(たとえば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/...に対しては正しく働きます。

0
ewroman