ページナビ

閲覧数: 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年5月12日

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

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

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

マイナーチェンジ
blank
2020年3月23日

かれこれ一年近くほったらかしだったので、気合をいれて「テーマ変更」と思っていたのですが、、、いろいろ  続きを読む

6月の検索ワードまとめ
blank
2019年6月30日

6月の検索ワードのまとめです。 意外なところで「zabbixダウングレード」が複数回検索され、単独の  続きを読む

アクセシビリティ対策
blank
2019年6月23日

テーマカスタマイズの一環で、トップページに一覧表示されている「写真を左右交互に表示する」ようにした際  続きを読む

dockerとproxy
blank
2019年6月18日

dockerやdocker-composeをプロキシ環境下で使うのに苦労したので忘れないようにメモし  続きを読む

コメントを残す

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