ページナビ

閲覧数: 31(0)

いわゆるトップページで一覧表示する時や、シングルページで個別記事を表示する時に、ページ下部に「新しい投稿」「過去の投稿」や「次の記事」「前の記事」を表示することをページナビゲーションといいます。いろいろなテンプレートで工夫を凝らして、下部に全ページをボタン表示したり、記事名のリンクにしたりと少しでも利便性を高め、アクセス数を稼ごうと涙ぐましい努力が続けられています。一般的にページナビを充実することはサイト運用者の義務とされているようです。個人的にはほっとけよ、とは思いますがw

現在使用中のテーマでは、get_the_post_navigation()を活用した実装がされています。wp-includes/link-template.phpをのぞいてみると以下のコードが確認できます。

function get_the_post_navigation( $args = array() ) {
        $args = wp_parse_args( $args, array(
                'prev_text'          => '%title',
                'next_text'          => '%title',
                'in_same_term'       => false,
                'excluded_terms'     => '',
                'taxonomy'           => 'category',
                'screen_reader_text' => __( 'Post navigation' ),
        ) );

        $navigation = '';

        $previous = get_previous_post_link(
                '<div class="nav-previous">%link</div>',
                $args['prev_text'],
                $args['in_same_term'],
                $args['excluded_terms'],
                $args['taxonomy']
        );

        $next = get_next_post_link(
                '<div class="nav-next">%link</div>',
                $args['next_text'],
                $args['in_same_term'],
                $args['excluded_terms'],
                $args['taxonomy']
        );

        // Only add markup if there's somewhere to navigate to.
        if ( $previous || $next ) {
                $navigation = _navigation_markup( $previous . $next, 'post-navigation', $args['screen_reader_text'] );
        }

        return $navigation;
}

ここで重要なのは、in_same_termパラメータです。ある記事を開いている時に、前後の記事を単純に日付でリンクするか、同一カテゴリー内で前後にリンクするかを制御します。上記コードでわかるように、デフォルトでは「false」設定されているので、そのまま使うと単純に日付で前後にリンクされます。

このサイトのように旅ブログとIT閑話を交互に書いていると、旅ブログの前後がIT閑話では不親切な場合もあります。そのような場合には、in_same_termを「true」で使用します。ただし、テーマのファンクションがパラメータ渡し出来るように継承されている必要はあります。その辺をいじると面倒だしってことで、テーマのファンクションではなく、直接get_the_post_navigation()を呼び出すという禁じ手もあります。

この手を使っても多少の問題はあって、現在のwordpressのバージョンでは、ある記事が属しているカテゴリーが複数あった場合、特定のカテゴリーで前後にリンク出来ません。実際にはカテゴリーに割り当てられているIDが昇順で選ばれるようなので、ユーザーから見るとカテゴリーによってはランダムに選択されているように見えます。そこで少し改善する余地があって、上記コードの中に、「excluded_terms」にリンクから除外するカテゴリーを指定出来るので、ここであらかじめ除外するカテゴリーを指定しておくと、ランダムな選択から、ある程度コントロールされた前後リンクにすることが出来ます。

<?php if ( is_user_logged_in() ) :
do_action( 'oblique_single_post_navigation' );
         else :
$args = wp_parse_args( $args, array(
        'prev_text'          => '%title',
        'next_text'          => '%title',
        'in_same_term'       => true,
        'excluded_terms'     => '1,5,6,7,8,10',
        'taxonomy'           => 'category',
        'screen_reader_text' => __( 'Post navigation' ),
        ) );
the_post_navigation($args);
        endif;
?>

上記コードでは、ログインしている場合には個別記事からの前後リンクは単純な日付で制御されますが、ログインしていない場合には、個別記事が属しているカテゴリーを基準に前後にリンクされ、その際に選択から除外されるカテゴリーが指定されています。

【最終更新日: 2017年8月13日】
カテゴリーIT閑話, 公開タグ, ,
検索精度を高める
2020年11月1日

検索ネタを連発するのはElasticsearchやElasticPresがバージョンアップした時のお  続きを読む

ElasticPress日本語設定2020年版
blank
2020年10月29日

ElasticsearchをWordpressで利用するためのプラグインであるElasticPres  続きを読む

ElasticPress 3.5
blank
2020年10月22日

Elasticsearch用のプラグインであるElasticPressがメジャーバージョンアップ(3  続きを読む

Elasticsearch 6.8.11
blank
2020年10月2日

2017年末に「2.4.6」から「5.6.5」へバージョンアップして以来の大幅バージョンアップです。  続きを読む

パンくずリスト詳細
blank
2020年5月12日

テーマの「マイナーチェンジ」に伴って「パンくずリスト」の仕様を若干変更しました。一つ前のテーマではパ  続きを読む

カテゴリーを制限する
blank
2020年5月11日

過去に何度も書いた「カテゴリー制限」の話、元はと言えば初期に書かれた「非公開」の記事が原因です。トッ  続きを読む

コメントを残す

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください