ページナビ

閲覧数: 34(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)タグ, ,
Sudachiプラグイン

このサイトで最も力を入れている設定が「検索」です。初稿である「検索に悩む」から既に8年弱が経過し、当  続きを読む

プラグインの脆弱性
blank

トップページから記事を選択して個別のページへ飛んだ後、本文の下に関連記事を表示するために使用していた  続きを読む

dockerとproxy
blank

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

カテゴリー制限の現在形
blank

残念ながらワードプレス公式サイトからは削除されてしまった「Allow Categories」プラグイ  続きを読む

関連記事
blank

Related Postsと言うプラグインで、関連記事をページ下部に表示しています。これまでは、Wo  続きを読む

名前解決
blank

バージョン5からのWordpressが「ツール」で提供している「サイトヘルス」という機能でサイトの健  続きを読む

スポンサーリンク

コメントを残す

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