web-dev-qa-db-ja.com

Wordpressのページ付けが機能しない - 常に最初のページのコンテンツが表示される

私は私がブログを持っているウェブサイトに取り組んでいますが、私は私がいくつかのビデオをドロップすることを可能にするためにカスタム投稿タイプも持っています。

表示されているビデオが9つ以上ある場合にページ付けが行われるように、ページ付けを使用したいと思います。

この最初の部分は動作します。ビデオは確かにページあたり9に制限されており、ページ付けは正しく下部に表示されます。

ただし、2ページ目のリンクをクリックすると、URLが変更されても、1ページ目の動画が表示されます。

私の「通常の」ブログ投稿では、ページ付けは意図したとおりに機能しています。

これは私が私のカスタム投稿タイプに使用している現在のコードです:

<?php if ( have_posts() ) : ?>
<?php $paged = (get_query_var('paged')) ? get_query_var('paged') : 1; query_posts('post_type=videos&posts_per_page=9&paged=$paged'); ?>

    <?php /* Start the Loop */ ?>
    <?php while ( have_posts() ) : the_post(); ?>

任意の助けは大歓迎です。

7
Johnny

現在のコードが失敗する理由

query_postsに渡されたパラメータの string一重引用符 でカプセル化されているため、変数(および$以外の特殊文字のエスケープシーケンス)が展開されるのを防ぐことができます。

query_posts("post_type=videos&posts_per_page=9&paged=$paged"); だろう その問題の世話をする。

query_posts('post_type=videos&posts_per_page=9&paged='.$paged); だろう も。

そして最後に、URLクエリスタイルの文字列 の代わりに混合引数の配列を渡すと、 になります。

とはいえ、 query_postsをまったく使用しないでください

どうすればいいの?

あなたのコメント通り、あなたは get_posts を使おうとしました。
これは実際には非常に便利な機能ですが、その後に WordPress-Loop を使用したい場合の正しい方法ではありません。 get_posts は投稿オブジェクトの配列を返します - WP_Query objectのpostsプロパティ。しかし、その1つのプロパティだけに、他のすべての利点やメソッドは含まれていません。 WP_Query が提供します。

したがって、上記のコードスニペットを使うには、この行に沿って何かをしてください。

<?php
    $paged = (get_query_var('paged')) ? get_query_var('paged') : 1; 
    $args = array(
        'post_type' => 'videos',
        'posts_per_page' => 9,
        'paged' => $paged
    );
    $your_query = new WP_Query( $args );

    if ( $your_query->have_posts() ) {
        /* The Loop */
        while ( $your_query->have_posts() ) {
            $your_query->the_post();
            // do something
        }
    } else {
        echo 'Sorry, no posts found.';
    }
?>
16
Johannes Pille