web-dev-qa-db-ja.com

カスタム分類アーカイブを使用したページネーションの修正

私は自分のサイトでシリーズの投稿を書く方法を設定しようとしています。アイデアは、各投稿がカスタム分類の異なるシリーズに属することができるということです。私は望み通りにすべてをセットアップしました... 1つの例外を除いて。

分類の登録

この部分は機能しています。次のコードをプラグインにドロップしました。

function jdm_build_series_taxonomy() {
    $labels = array(
        'name' => _x('Series Labels', 'taxonomy general name'),
        'singular_name' => _x('Series Label', 'taxonomy singular name'),
        'search_items' => __('Search Series Labels'),
        'popular_items' => __('Popular Series Labels'),
        'all_items' => __('All Series Labels'),
        'parent_item' => __('Parent Series Label'),
        'parent_item_colon' => __('Parent Series Label:'),
        'edit_item' => __('Edit Series Label'),
        'update_item' => __('Update Series Label'),
        'add_new_item' => __('Add New Series Label'),
        'new_item_name' => __('New Series Label Name')
    );

    register_taxonomy(
        'series',
        'post',
        array(
            'hierarchical' => true,
            'label' => __('Series'),
            'labels' => $labels,
            'query_var' => true,
            'rewrite' => true
        )
    );
}

add_action( 'init', 'jdm_build_series_taxonomy', 0 );

これにより、[投稿]ドロップダウンメニューに[シリーズラベル]が追加され、投稿編集画面に[シリーズラベル]ボックスが表示されます。すべてが機能しており、投稿をシリーズの一部として完全にマークできます。問題は次のセクションにあります...

分類法の項目のリスト

私の目標は、読者がシリーズの記事を一度に1つずつ、最も古い記事から始めて、時系列に沿って進むことを許可することです。これは通常のアーカイブページとは異なります。アーカイブには1ページに10個の投稿がありますが、シリーズアーカイブには1ページに1つの投稿のみが必要です。

テンプレート内にtaxonomy-series.phpファイルを作成しました。そして、それはhalf動作します。最初のページは問題なく動作します-http://localhost/wp/series/my-test-series/は、シリーズの最初の記事を表示し、ページの下部に[次のエントリ"]リンクが表示されます。ここまでは順調ですね ...

しかし、「Next Entry"」をクリックして次のページ(http://localhost/wp/series/my-test-series/page/2/)に移動すると、a)間違った記事であり、b)間違ったテンプレートです!

ただし、閲覧ページで「ブログページを最大で表示:」を「1」に設定すると(通常は10に設定されます)、問題なく動作します。ページ2は2番目の記事を表示し、ページ3は3番目の記事を表示します。

だから...分類アーカイブページが各ページに1つの投稿のみを表示するように強制するには、何をダブルチェックする必要がありますか?私は次を試しました:

$new_query = wp_parse_args(
    $query_string, 
    array(
        'posts_per_page' => 1,
        'paged' => $paged
    )
);

query_posts($new_query);

そして

query_posts($query_string.'&posts_per_page=1&paged='.$paged);

無駄に...アイデア?ヒント?提案?

4
EAMann

カテゴリとタグのアーカイブページの投稿数を変更するために使用するコードは次のとおりです。

query_posts( array_merge( array(
'posts_per_page' => 1
), $wp_query->query ) );

カスタム分類法でこれをうまく動作させることができない場合は、ネイティブ(カテゴリ、タグ)を使用して、問題がコード自体にあるのか、分類法なのかその他の問題なのかを確認します。

また、あなたがこれを見逃したのか、または省かれたのかもわかりませんが、$ pagedはグローバル変数ではありません。 get_query_var( 'paged')として取得する必要があります

2
Rarst

私はこれについて問題に直面し、髪を引っ張ることによって困難な時間を数時間に渡りました。私はグーグルで検索し、トピックに関する具体的な解決策は見つかりませんでした。私はいくつかの才能のある記事を見つけましたが、彼らは私の問題を満足していませんでした。実際には、カスタム分類アーカイブページの改ページは、関連する関数の引数の設定に依存します。そこで、実際にここに行き、分類法アーカイブのページネーションの問題を解決するという考えを共有します。

カスタム分類アーカイブページのページネーションが完全に機能するために必要な5つのこと:

(1)exclude_from_searchパラメータキーをregister_post_type引数パラメータとして設定したり、'exclude_from_search' => falseに設定したりしないでください。デフォルトでは、falseに設定されています。

(2)カスタム投稿タイプで使用される分類法は、'taxonomies' => 'custom_taxonomy_name'register_post_type引数パラメーターとして設定するか、register_taxonomy_for_object_type()を直接使用します。カスタム分類法は、register_taxonomy()に登録する必要があります。

(3)new WP_Query ($args)内でクエリ中

i)管理者で設定されていない場合static front page使用前にnew WP_Query($args)

$paged = ( get_query_var('paged') ) ? get_query_var('paged') : 1;

$query = new WP_Query( array( 'paged' => $paged ) );を使用します

ii) 'new WP_Query($ args)'の前に管理静的フロントページの使用で設定された場合:

  $paged = ( get_query_var('page') ) ? get_query_var('page') : 1;

$query = new WP_Query( array( 'page' => $paged ) );を使用します

new WP_Query($arg)引数配列でposts_per_pageおよびpagedパラメーターを使用することを忘れないでください。

静的フロントページを設定しない場合は、new WP_Query ($arg)引数配列でpageパラメーターを使用する必要があります。

(4)以下の例のようなWordpress paginate_links( $args )関数を使用して、アーカイブテンプレートファイルのページネーションをレンダリングします。

<?php $big = 999999999; // need an unlikely integer
echo paginate_links( array(
                  'base' => str_replace( $big, '%#%', esc_url( get_pagenum_link( $big ) ) ),
                  'format' => '?paged=%#%',  or   '/paged=%#%',  // if using pretty permalink
                   'current' => max( 1, get_query_var('paged') ),
                   'total' => $query->max_num_pages ) ); // Here $max_num_pages is the properties of  new WP_Query() object . It is total number of pages. Is the result of $found_posts / $posts_per_page
 ?>

(5)paginate_links()関数は、ul liクラスを含むpage-numbersリストを出力します。 bootstrap inject paginationクラスをjavascriptまたはjqueryの助けを借りてulに使用すると、Nice fancy paginationが出力されます。

404問題なしに、分類法アーカイブテンプレートでページネーションを楽しむことができることを願っています:-)

0
saifulmasud