KEPRATE
  • TOP トップページ
  • ABOUT KEPRATEについてKEPRATEについて
  • BLOG ブログ
    BLOG ブログ
    画像:今ならまだ間に合う! CSSのposition要素の新刺客 position: sticky; を使おう!

    今ならまだ間に合う! CSSのposition要素の新刺客 position: sticky; を使おう!

    2023.07.24
    画像:WordPressのテーマを自作しよう! ページネーション(ページ送り)をプラグインなしで実装する方法

    WordPressのテーマを自作しよう! ページネーション(ページ送り)をプラグインなしで実装する方法

    2023.07.14
    画像:WordPressのテーマを自作しよう! get_previous_post()を使って同カテゴリ内の前後リンクを取得する方法

    WordPressのテーマを自作しよう! get_previous_post()を使って同カテゴリ内の前後リンクを取得する方法

    2023.07.11
    画像:WordPressのテーマを自作しよう! タグ一覧ページ・タグクラウド作成方法 タグ関連はこれを読めば大丈夫!

    WordPressのテーマを自作しよう! タグ一覧ページ・タグクラウド作成方法 タグ関連はこれを読めば大丈夫!

    2023.07.10
  • LAB ラボ
    LAB ラボ
    画像:KEP TYPING KEYBOARD
    KEP TYPING KEYBOARD
    公開日
    2017.07.01
    画像:KEP SLOT
    KEP SLOT
    公開日
    2017.07.01
    画像:KEP DOT DRAW
    KEP DOT DRAW
    公開日
    2017.07.01
  • FAQ よくあるご質問よくあるご質問
  • NEWS お知らせ
  • CONTACT お問い合わせ
    CONTACT お問い合わせ
    画像:ショップ 担当者様
    SHOP ショップ 担当者様
    画像:制作会社 担当者様
    COMPANY 制作会社 担当者様

WordPressのテーマを自作しよう! get_previous_post()を使って同カテゴリ内の前後リンクを取得する方法

Satoken Satoken
WEBメモ
2023.07.11
  • WordPress
画像:WordPressのテーマを自作しよう! get_previous_post()を使って同カテゴリ内の前後リンクを取得する方法
Satoken サトケン

ハメカメ師匠
WordPressの同カテゴリ内の前後リンクでハマってしまいました・・・
複数のカテゴリで前後リンクがまったくうまくいかずでして・・・

画像:前後リンク

こんな感じのやつなのですが・・・

ハメカメ ハメカメ

初歩の初歩じゃな・・

get_previous_post()とget_next_post()を使い、前後の記事の投稿記事IDを取得してget_permalink(ID値)とすれば 前後のリンクを取得することが出来るじゃろう・・・ほんでなんたらかんたら・・・・・・ちんたらかんたら・・
・・・であろう!

相変わらず・・ もっさいのぅ・・・

Satoken サトケン

・・・・

すみません。。

しかし、ネットで調べてみても色々な情報が錯綜しており
コードをコピペしてもうまく動作がしなくて・・・

ハメカメ ハメカメ

なるほどのぉ・・・

おそらく、それはカテゴリの構造が参考ページと違ったり
get_previous_post()の仕様をキチンと理解せず
なんとなく使用しているからうまく動作しないのであろう・・・

Satoken サトケン

なるほど・・・
少しこのget_previous_post()をスペシャルマンレベルと舐めていました・・・
一度キチンと整理してみます・・・

目次
  • 01.get_previous_post()の仕様
  • 02.get_previous_post()の正しい使い方
  • 03.前後記事のリンクを作成
  • 04.まとめ

get_previous_post()の仕様

仕様ですが
get_previous_post( bool $in_same_term = false, int[]|string $excluded_terms = ”, string $taxonomy = ‘category’ )
となります。

分かりやすくすると
get_previous_post(
 【第1引数】同カテゴリに限定するかのフラグ、
 【第2引数】除外するカテゴリID、
 【第3引数】タクソノミー
)
となります。

今回はカテゴリページで使うので【第3引数】タクソノミーの初期値は’category’で問題ないので何もしなくても大丈夫です。

【第1引数】同カテゴリに限定するかのフラグ
限定する場合はtrue、限定しない場合はfalse

【第2引数】除外するカテゴリID値
配列 : [カテゴリID値1,カテゴリID値2,カテゴリID値3] か
文字列 : ‘カテゴリID値1,カテゴリID値2,カテゴリID値3’ で指定します。

はまりポイント

カテゴリ構造が少し複雑になり、あまり仕様を理解せず適当に使っていたせいでまったくうまく動作しませんでした。その原因として一つのカテゴリだけでなく複数のカテゴリで限定する必要があったからです。

第1引数である同カテゴリに限定するかのフラグをtrueにしているとすでにカテゴリが限定されている状態なので除外もへったくそれもない状態なのです・・

カテゴリを限定したい時は除外するのではなく限定したいカテゴリIDを指定するほうがすごくしっくりくるのですが僕だけですかね。。。。

get_previous_post()の正しい使い方

下記のようなカテゴリ構造があります。
これを用いて正しい使い方をマスターしようと思います。

画像:カテゴリ図

あなたは今、アイドル超人カテゴリページにいます。

画像:カテゴリ図

アイドル超人カテゴリページだけの同カテゴリ前後リンクを設置するにはどうしたらいいでしょうか?

    PHP
    コピー
$prev_post = get_previous_post(true);
$next_post = get_next_post(true);

これだけで大丈夫です。
すごく簡単ですね。。
ここから僕は少しハマりました・・・

あなたは今、同じくアイドル超人カテゴリページにいます。

画像:カテゴリ図

アイドル超人と残虐超人カテゴリページの複数カテゴリの同カテゴリ前後リンクを設置するにはどうしたらいいでしょうか?

    PHP
    コピー
$prev_post = get_previous_post(true,'2,3');
$next_post = get_next_post(true,'2,3');

これでうまく動作するでしょうか?

これでは正常に動作しません。

第2引数は除外するカテゴリIDなのです。

    PHP
    コピー
$prev_post = get_previous_post(true,'5,6');
$next_post = get_next_post(true,'5,6');

これでうまく動作するでしょうか?

これでも正常に動作しません。

アイドル超人カテゴリページにいて第1引数の同カテゴリフラグをtrueにしているのでアイドル超人のみの同カテゴリ前後リンクが設置されてしまいます。

複数カテゴリをまたぐ同カテゴリ前後リンクを作成したい場合は第1引数の同カテゴリフラグは必ずfalseにしないといけません。
そして除外するカテゴリを指定します。

    PHP
    コピー
$prev_post = get_previous_post(false,'5,6');
$next_post = get_next_post(false,'5,6');
画像:カテゴリ図

全体から必要ないカテゴリを除外して必要であるカテゴリを残すという棒崩しのような回りくどい仕様なのですね。。。 すごく直感的に必要なカテゴリ値を指定したい・・・

前後記事のリンクを作成

正しい同カテゴリ前後の記事の情報を取得できたらあとは比較的簡単な作業となります。
前後記事のリンクを作成するのみです。

    PHP
    コピー
$prev_post = get_previous_post(任意);
$next_post = get_next_post(任意);

$prev_postと$next_postに必要な前後記事の情報が入っているのでその中からID値を取得。

$prev_post->ID$next_post->IDがぞれぞれのID値となります。

リンクURLを取得

    PHP
    コピー
$prev_link = get_permalink($prev_post->ID);
$next_link = get_permalink($next_post->ID);

ID値を元にリンクURLを取得。get_permalink()!!!

タイトルを取得

    PHP
    コピー
$prev_title = get_the_title($prev_post->ID);
$next_title = get_the_title($next_post->ID);

ID値を元にタイトルを取得。get_the_title()!!!

全PHP

今回はget_previous_post()のまとめがメインですので参考程度に。。。
「前の記事へ」と「次の記事へ」は最初と最後は存在しないのでemptyで存在チェックしてif文で振り分け。

    PHP
    コピー
<?php

$prev_post = get_previous_post(任意の設定);
$next_post = get_next_post(任意の設定);

$prev_link = get_permalink($prev_post->ID);
$next_link = get_permalink($next_post->ID);
$prev_title = get_the_title($prev_post->ID);
$next_title = get_the_title($next_post->ID);

?>
<ul class="next-prev__list">
    <li class="-prev">
<?php if (!empty( $prev_post )): ?>
        <a href="<?php echo $prev_link; ?>">
            <span class="next-prev__list-txt">前の記事へ</span>
            <span class="next-prev__list-ttl"><?php echo $prev_title; ?></span>
        </a>
<?php endif;?>
    </li>
    <li class="-next">
<?php if (!empty( $next_post )): ?>
        <a href="<?php echo $next_link; ?>">
            <span class="next-prev__list-txt">次の記事へ</span>
            <span class="next-prev__list-ttl"><?php echo $next_title; ?></span>
        </a>
<?php endif;?>
    </li>
</ul>

まとめ

  • ・get_previous_post()は第1引数をtrueにすると第2引数は必要がなくなり現在の該当カテゴリ内のみ。
  • ・全体から必要ないカテゴリを除外して必要であるカテゴリを残すという棒崩しのような回りくどい仕様。

というのを忘れずに構築すれば問題ないかと思われます。

ハメカメ ハメカメ

ブラボー ブラボー
なんかたまに正常に動作しないと思ったらそんな仕様だったのか!

ヒューヒューだよ。サトケン。

Satoken サトケン

・・・

え・・・ マスターしてなかったんですか??

・・・

ハメカメ ハメカメ

・・・・・・

SHARE

  • Facebook
  • Twitter
  • はてブ
  • pocket
  • Line
Satoken
Satoken
フロントエンド関連をゴニョゴニョとマークアップする人
96万WEBパワーの持ち主。火事場のWEB力発動時7000万WEBパワーまで計測。
前の記事へ WordPressのテーマを自作しよう! タグ一覧ページ・タグクラウド作成方法 タグ関連はこれを読めば大丈夫!
次の記事へ WordPressのテーマを自作しよう! ページネーション(ページ送り)をプラグインなしで実装する方法
一覧へ戻るBack to List
  • にほんブログ村 IT技術ブログ Webサイト構築へ
  • ウェブデザイナーランキング
CONTACT
CONTACT キャラクター
CONTACT

KEPRATE ♥¥ ケプレイト ♥¥ CONTACT ♥¥ お問い合わせ ♥¥ KEPRATE ♥¥ ケプレイト ♥¥ CONTACT ♥¥ お問い合わせ ♥¥

  • TOP
  • BLOG
  • WEBメモ
  • WordPressのテーマを自作しよう! get_previous_post()を使って同カテゴリ内の前後リンクを取得する方法
  • Home
  • About
  • Blog
  • Lab
    • KEP TYPING KEYBOARD
    • KEP SLOT
    • KEP DOT DRAW
  • Faq
  • Contact
    • Shop
    • Company
  • お知らせ
  • プライバシーポリシー
Tel :

050-5899-7800

Address :

〒573-0033
大阪府枚方市岡南町12-12

GoogleMap

KEPRATE
© 2014-2023 KEPRATE.