WordPressで連載コンテンツを読みやすくする方法【小説や漫画など】|カテゴリページを目次に・前後記事ナビを同一カテゴリにする

アマチュアが小説や漫画を投稿・連載するとなると「小説家になろう」や「ジャンプルーキー!」みたいなサイトが主流だと思います。

私もまた「なろう」で活動する1人です

しかしその一方で、自分のWordPressサイトに連載コンテンツを掲載したい方もいるでしょう。
私もやはりその1人。
そもそもWordPressを始めたきっかけは小説サイトを立ち上げるためでした。

本記事では、その経験をもとに、WordPressで連載コンテンツを読みやすくするちょっとした工夫を紹介します。
小説や漫画はもちろん、コラム・エッセイ・講座などでも役立ちます。
具体的には、次の2つです。

  1. カテゴリページを目次代わりにする。
  2. 前後記事ナビを同一カテゴリにする。

また、2についてはテーマ別に方法を紹介します。

天満川鈴 WRITTEN BY 天満川鈴
スポンサーリンク

1 カテゴリページを目次代わりにする

目次をどう作るかはかなり悩みました。

小説紹介の固定ページに話数へのリンクを並べる方法もあります。
しかし話数が増えるとリストが長くなり、アコーディオンで折り畳んでも「開く→目的の話を探す→クリック」と手間が増えます。
もっとシンプルな方法はないかと考えました。

何か、いい手はないか……。
考えた末に行き着いた結論が、

カテゴリページを目次にする!

作品単位でカテゴリをわけるなら、カテゴリページに並ぶのは当該作品だけになります。
各話にアイキャッチをつければ見た目のインパクトもあります。
固定ページからはカテゴリページへのリンクだけで済むのですっきりします。

ここで解決しなければならない問題は、

目次だから1話から並ぶようにしないと

通常は新しい順(降順)。
古い順(昇順)に並べ変えるコードはこちらです。
「novel1」を対象のカテゴリスラッグに変更し、子テーマのfunctions.phpに記述してください。

function novel_category_order( $query ) {

if ( is_admin() || ! $query->is_main_query() ) {
return;
}

if ( is_category( 'novel1' ) ) {
$query->set( 'order', 'ASC' );
}

}
add_action( 'pre_get_posts', 'novel_category_order' );

わかりやすく並びました

2 前後記事ナビを同一カテゴリにする

WordPressの前後記事ナビのデフォルトは「全体記事」

前項で、同一作品は同一カテゴリにして目次として表示しました。
しかしそれだけではまだ足りません。

小説のページのはずなのに、次ページのナビが昨日食べたイチゴ大福の記事になっちゃってる……

どうしてこうなるか。
いえ、むしろ「こうなって当たり前」と言った方が腑に落ちやすいでしょう。

WordPressの前後記事ナビ(送り)のデフォルト設定は全体記事

「小説2話」の次は「小説3話」、戻ったら「小説1話」。
こうしたいのであれば、

前後記事ナビを同一カテゴリにする必要があります

前後記事ナビを同一カテゴリにする方法はテーマによって異なる

実は、ここははまりやすいポイントなんです。
なぜなら、

テーマによってページナビの実装コードが異なるんです……

前後記事ナビの実装方法はテーマによって異なるため、本記事ではテーマ別に紹介します。

  1. テーマに変更機能がある場合(SWELL、Cocoonなど)
  2. テンプレートファイルに直書きする場合(Luxeritas、Simplicityなど)
  3. フィルターフックでカスタマイズする場合(GeneratePress、Lightningなど)

テーマに変更機能がある場合

SWELLやCocoonではテーマに「記事送りをカテゴリ別にする」設定がついています。
もしこれからサイトを作るつもりでテーマが決まっていないのでしたら、

はじめから変更機能のついたテーマにするのをおすすめします

この2つは日本国内では特に人気のテーマ。
どちらも利用者が多く、情報が豊富なのも魅力です。

個人的には、こんな感じです。

  • お金払ってもいいから洗練されたデザインのサイトを楽に作りたい →SWELL
  • できれば無料がいいとか、WordPressでサイト作るの初めてとか →Cocoon

テンプレート直書きで編集する場合

いずれのパターンも、該当のテンプレートファイルを子テーマにコピーしてコードを修正します。
このカスタマイズで忘れてはならないのが、

テーマのアップデートに注意してください

該当ファイルがアップデートされても、ファイルを差し替えないとアップデートが適用されないままになってしまいます。

多くのテーマで見られるパターン

WordPressテーマ前後記事ナビのコードで多く見られるのはこのパターン。

$prevpost = get_adjacent_post(false, '', true); //前の記事
$nextpost = get_adjacent_post(false, '', false); //次の記事

該当のファイルを子テーマにコピーします。
get_adjacent_post();
のパラメーターを次の通りに修正します。

$prevpost = get_adjacent_post(true, '', true); //前の記事
$nextpost = get_adjacent_post(true, '', false); //次の記事

Luxeritas(V2.x以前)のパターン

LuxeritasのV3.0以降は前項のパターンとなります。
ここでは例としてV2.x以前のコードを紹介します。

Luxeritasのページ送りは投稿テンプレート(single.php)に直書きされています。
次の通り修正します。

「次のページ」(next)のループ部分。

 $next_post = get_next_post();
 get_next_post();$in_same_termの値を指定します。
$next_post = get_next_post($in_same_term = true);

$in_same_termはカテゴリを判断するパラメータ。
デフォルトはfalse。trueだと同じカテゴリになります。

「次のページ」(next)の表示部分。

<div class="next"><?php next_post_link( '%link', $next_thumb . '<div class="ntitle">' . $next_post->post_title . '</div><div class="next-arrow"><i class="fa fa-arrow-right pull-right"></i>Next</div>' ); ?></div>

ここも要領は同じ。

<div class="next"><?php next_post_link( '%link', $next_thumb . '<div class="ntitle">' . $next_post->post_title . '</div><div class="next-arrow"><i class="fa fa-arrow-right pull-right"></i>Next</div>', true ); ?></div>

長くてよくわからないかもですが、next_post_link();のパラメーターはリンク・サムネイル・タイトル・矢印の並び。
一番最後に「true」を入れてあげれば、先程の「$in_same_term = true」と同じになります。
省略しているのは、他にもタクソノミーなどによる分類があるのですが、デフォルトはカテゴリ。
何も書かなければ「true」だけで「$in_same_term=true」と同じだからです。

ここまでがnext(右側)、prev(左側)も同じようにやります。
prevは修正後のみ掲載します。

「前のページ」(prev)のループ部分(修正後)

 $prev_post = get_previous_post($in_same_term = true);
「前のページ」(prev)の表示部分(修正後)
<div class="prev"><?php previous_post_link( '%link', $prev_thumb . '<div class="ptitle">' . $prev_post->post_title . '</div><div class="prev-arrow"><i class="fa fa-arrow-left pull-left"></i>Prev</div>', true ); ?></div>

フィルターフックを使う場合

GeneratePressやLightning G3など、最近はフィルターフックのついたテーマが増えてきています。
これによって子テーマ側からコードのみで簡単に実装することが可能となります。

テーマ本体を書き換えないため、アップデートにも強いです

GeneratePressの場合。

add_filter( 'generate_post_navigation_args', function( $args ) {
$args['in_same_term'] = true; // 同一カテゴリー内に限定
$args['taxonomy'] = 'category'; // カテゴリーで判定

return $args;
} );

Lightning G3の場合。

add_filter( 'lightning_prev_next_post_in_same_term', '__return_true' );

add_filter( 'lightning_prev_next_post_taxonomy', function() {
return 'category';
} );

正しく設定したはずなのに動かないケース

カテゴリのつけ方に問題がある

記事の通りにしたはずなのにできない!

もしかして親カテゴリにもチェックつけてませんか?

親カテゴリにチェックをつけてはいけません。

親カテゴリにチェックをつけると、親カテゴリの方でページ送りされてしまいます。
例えば小説を一纏めにするカテゴリを「novel」、子カテゴリに小説個別のカテゴリ「novel1」、「novel2」、……とあったとします。
この場合、チェックを付けるのは子カテゴリのnovel1だけにしておかないと、思った通りに動きません。

WordPress環境に不具合がある

やっぱり動かない!

コードが正しくても動かない可能性はあります

原因はプラグインの相性だったり、カスタマイズでWordPressがおかしくなってたり。
以前、私もこのパターンのトラブルに見舞われました。
どうしても原因がわからず、WordPressを再インストールしてみたら解決しました。

結論

目次はできた、次の話もスムーズに続きが読めるようになった。
あとは頑張って連載を進めるのみ!
そこが一番難しいんですけど!

エタらないようにお互い頑張りましょう!

 

スポンサーリンク
天満川 鈴のプロフィール画像
WRITTEN BY

天満川 鈴

未経験からWEB業界に入り、現在はWEBディレクターとして実務に従事。 要件整理・導線設計・コンテンツ構成などを学びながら、日々改善を重ねています。 AIを活用したコンテンツ制作・効率化を強みとし、プロンプト設計を含めた制作フローの最適化にも取り組んでいます。

詳しいプロフィールはこちら

RECOMMENDED INFRASTRUCTURE

私はConoHa以外を勧めない。

2016年からずっとConoHaを使い倒してきました。知人に「一番いいサーバーは?」と聞かれたら、迷わずここを教えます。

レンタルサーバーナンバーワンを誇る高速環境であることはもちろん。私が「黒い画面って何?」というド素人からサイト制作のプロになれたのは、傍らにずっとこのはちゃんがいてくれたから。
私がConoHaを使い続ける、嘘偽りない理由です。

※ConoHaに初めて入会の方限定。
本CTAの画像もしくはボタンを押してWINGパック12か月以上を契約すると、最大5000円割引してもらえます。

公式サイトで詳細を見る
× 閉じる