ページナビ

閲覧数: 33(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閑話, 公開タグ, ,
ページナビのテキスト

記事ページの下部に前後の記事(投稿)へのリンクが表示される仕様なのだが、「カテゴリーに制限」をかけて  続きを読む

タイトルを抜粋する
blank

関連記事プラグインを使って、記事本文の下に「関連記事」を表示している。情報としては、タイトル、画像、  続きを読む

検索精度を高める
blank

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

管理画面を制限する
blank

このサイトではネット上のさまざまな攻撃からの防御のため、Wordfenceプラグインの無料版を使用し  続きを読む

ElasticPress 3.5.6
blank

マイナーバージョンアップにも関わらず、検索スコアリングのパラメータが微調整された結果、期待する検索結  続きを読む

閲覧数まとめ
blank

閃きついでに総合計と週合計をフラグで制御する方式に変更してみた。これまではベタに関数をまるまるコピー  続きを読む

スポンサーリンク

コメントを残す

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