私は自分のサイトでシリーズの投稿を書く方法を設定しようとしています。アイデアは、各投稿がカスタム分類の異なるシリーズに属することができるということです。私は望み通りにすべてをセットアップしました... 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);
無駄に...アイデア?ヒント?提案?
カテゴリとタグのアーカイブページの投稿数を変更するために使用するコードは次のとおりです。
query_posts( array_merge( array(
'posts_per_page' => 1
), $wp_query->query ) );
カスタム分類法でこれをうまく動作させることができない場合は、ネイティブ(カテゴリ、タグ)を使用して、問題がコード自体にあるのか、分類法なのかその他の問題なのかを確認します。
また、あなたがこれを見逃したのか、または省かれたのかもわかりませんが、$ pagedはグローバル変数ではありません。 get_query_var( 'paged')として取得する必要があります
私はこれについて問題に直面し、髪を引っ張ることによって困難な時間を数時間に渡りました。私はグーグルで検索し、トピックに関する具体的な解決策は見つかりませんでした。私はいくつかの才能のある記事を見つけましたが、彼らは私の問題を満足していませんでした。実際には、カスタム分類アーカイブページの改ページは、関連する関数の引数の設定に依存します。そこで、実際にここに行き、分類法アーカイブのページネーションの問題を解決するという考えを共有します。
カスタム分類アーカイブページのページネーションが完全に機能するために必要な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問題なしに、分類法アーカイブテンプレートでページネーションを楽しむことができることを願っています:-)