web-dev-qa-db-ja.com

カスタム著者ページ(他の理論)での著者の投稿リストのページ付け

[OK]をクリックします。カスタム作成者ページのカスタムページネーションの別のストーリーです。私が何をしたいのかは作者のアバター、説明、ウェブサイト、そしていくつかの追加フィールドを表示すること、そしてもちろん彼の投稿をリストしてそれをページ付けすることです....

これが私のカスタム作者ページのスクリーンショットです: http://i56.tinypic.com/2cosldy.png

ご覧のとおり、すべてが順調に進んでいるようです。さて、問題はページネーションです。私は Kreisi(プラグインを使わないでページネーション) でコードを使いました。私がしたことはカスタムループを作成してKreisiの関数にそれを呼び出すことです

これがコードです

    $uid = $curauth->ID;
$paged = ( get_query_var( 'paged' ) ) ? get_query_var( 'paged' ) : 1;
$authloop = new WP_Query("author=$uid&paged=$paged");
$ppp = 5; //set my custom number of post to appear

$args = array(
           'post_per_page' => $ppp,
           'author' => $uid,
           'paged' => $paged

 );

$authorposts = get_posts($args);


if ( count( $authorposts ) > 0 ) {              

        foreach ( $authorposts as $post ):  setup_postdata($post)            

        ?>
                <li>
                        <?php if ( has_post_thumbnail() ) : ?>
                                <img src="<?php echo bloginfo('template_url'); ?>/inc/scripts/timthumb.php?src=<?php echo catch_that_image(); ?>&w=40&h=40&zc=1&q=30" alt="<?php the_title(); ?>" class="authorpostimg"/>

                        <?php else :    ?>
                                <img src="<?php echo bloginfo('template_url'); ?>/inc/scripts/timthumb.php?src=<?php echo catch_that_image(); ?>&w=40&h=40&zc=1&q=100" alt="<?php the_title(); ?>" class="authorpostimg"/>
                        <?php endif; ?>

                        <a href="<?php the_permalink() ?>" rel="bookmark" title="Permanent Link to <?php the_title_attribute(); ?>" class="authorpostlink"><?php the_title(); ?></a>
                        <?php the_excerpt(); ?>
                </li>
        <?php

        endforeach;  

        wnw_authpagination($authloop->max_num_pages);

} else {
        echo '<p>No articles by this user</p>';
}

理解を深めるためのシナリオは次のとおりです。

ブログに合計30のブログ記事があり、作者のVen Francisに15があるとします。変数で見ることができるのであれば、post_per_pageの値を5に設定しました。そしてKreisiの関数では範囲は2です。それをさらに理解するための彼のコードへのリンク)だからそれが起こるべきことは、ページネーションが5つのページボタンを表示するべきであるということです

[c] [2] [3] [>] [>>]

ここで、[c]は現在の... [3]、[>>]は最後のページ(3ページ目)です。しかし、私の状況で起こっていることは、あなたが[>>]の上にマウスを持っていくと/ page/6と表示され、私はそれがブログの投稿の総数を得ていると思うということです。

そしてあなたが3(3ページ目)をクリックするならば。それでも、4、5と[>>]を表示しますが、表示されません。下の図のように

[<<] [<] [1] [2] [c] [4] [5] [>] [>>]

シナリオと問題を理解してください。もう一度感謝し、神のご加護を!

PS:kreisiはもう彼のすばらしいコードのサポートをしていないので、私は自分でこれをやらなければならない。私はあなたたちから少し助けが必要です。ありがとうございました!

1
Ven

私の(無料&オープンソース) "Easy Pagination Deamon" を試してください。それはかなり高度であり、作者のテンプレート上でも動作するはずです。リンクに表示されているreadmeをそのまま使用して、ページ区切り付きの投稿やページにも適用できます。あなたのテーマフォルダにそれを統合してinclude_once( 'pagination.class.php' );のような何かであなたのfunctions.phpでそれからそれをoxo_pagination( array( 'your arguments' ) );でそれから呼び出すこともできます。

1
kaiser

ここで2つの追加ループを作成しています。

$authloop = new WP_Query("author=$uid&paged=$paged");

そして:

$authorposts = get_posts( array(
    'post_per_page' => $ppp, // Shouldn't this be postS_per_page?
    'author' => $uid,
    'paged' => $paged
) );

総ページ数を取得するには$authloopを使用しますが、posts_per_page値を指定しないため、デフォルト値が使用されます。実際のポストループで指定した5と同じにはならない場合があります。

それに加えて、ほとんどの場合、ページ区切り付きのカスタムループを使用するのは悪い考えです。問題は、WordPressが常に(メインループを設定するために)あなたに代わって問い合わせを行い、URLからpagedパラメータを受け取ることです。あなたが作者のアーカイブにいるとしましょう。デフォルトのposts_per_pageは10です。この投稿者は40投稿しています。カスタムループでは、1ページに5件の投稿しか表示されません。あなたが今5ページ目にいる場合、WordPressはあなたのカスタムループでするように21-25の代わりに41-50の投稿を問い合わせます。 WordPressは投稿を見つけず、あなたの404.phpテンプレートの代わりにauthor.phpテンプレートをロードします。

このため、カスタムループを実行せず、pre_get_postsまたは別のフックを使用してデフォルトのループにフックすることをお勧めします。

0
Jan Fabry