WordPressで関連記事を記事本文に簡単に挿入できるように、同じタグをつけた記事へのリンクを一覧で表示させるショートコードを作ってみました。同じことをしようとしている方の参考になれば幸いです。あくまで自己責任でローカル環境などでテストしてからお使いください。
使い方
記事にタグIDを指定してショートコードを入れると、そのタグがついた記事のリンク一覧が表示されます。
[tag-links tagid="100"]
タグIDは、管理画面の「投稿 > タグ」メニューで表示されるリンクで確認してます(もっといい方法あると嬉しいんですけど)。
仕様
- 指定したタグIDのすべての記事のリンク一覧を表示します
- ショートコードにtagidが指定されていない場合、何も表示されません
- タグのついた記事がない場合も何も表示されません
- ショートコードを入れた記事は除外されます
ソース
以下をfunctions.phpに入れます。
// shortcode to get links in with the same tag
function get_tagged_posts($atts, $content = null) {
$a = shortcode_atts( array(
'tagid' => ''
), $atts );
if(!empty($a['tagid'])){
$pageid = get_the_ID ();
$tag_link_content = '';
global $post;
$args = array(
'tag_id' => $a['tagid'],
'order' => 'DESC',
'posts_per_page' => -1,
'exclude' => $pageid
);
$tagged_posts = get_posts( $args );
if($tagged_posts){
$tag_link_content='';
foreach($tagged_posts as $post) :
setup_postdata($post);
$tag_link_content.='- '.the_title("","",false).'
';
endforeach;
$tag_link_content.='
';
}
wp_reset_postdata();
return $tag_link_content;
}
}
add_shortcode("tag-links", "get_tagged_posts");
ちょっと説明
以下「#」はソースの行数です。
#7
if(!empty($a['tagid'])){
tagidが指定されてるかチェックします。
#10
global $post;
元記事のメインのThe Loop とは違うループの操作をするために指定してます。他の方法が良いという情報 も。WP_Query とか使った方が良いのでしょうか?
#12〜17
$args = array(
'tag_id' => $a['tagid'],
'order' => 'DESC',
'posts_per_page' => -1,
'exclude' => $pageid
);
get_posts()を使って同じタグのついた記事一覧を取得するために、以下を引数として指定しています。
- タグID
- 表示順
- 表示件数(-1を指定すると全記事表示になります)
- 除外する記事のID(#8で取得した元記事のIDを指定してます)
#21〜28
if($tagged_posts){
$tag_link_content='';
foreach($tagged_posts as $post) :
setup_postdata($post);
$tag_link_content.='- '.the_title("","",false).'
';
endforeach;
$tag_link_content.='
';
}
get_posts()で記事が取得できたことを確認して、記事が取得されていた場合にループしてリンクを生成してます。
#30
wp_reset_postdata();
ループをリセットして、テンプレートタグが元記事のループを参照するようにします。
以上です。
推奨されていない書き方、より良い書き方などあったら、コメントなどでご指摘いただけたら幸いです。
WordPress関連の記事
よかったら他のWordPress関連の記事もどうぞ
- WordPressの投稿をカレンダー表示できるプラグイン、Editorial Calendarが便利
- WordPressで投稿日時を○日前と表示する方法
- 年末だし、WordPressのバックアップとローカル環境への復元
- WordPressでレスポンシブ・イメージの自動化を可能に。RICG公認プラグインが公開
- HTML5やCSS3のサポート状況を簡単に記事に挿入できる「Can I use…」のWordPressプラグインが便利
- WordPress 4.4からデフォルトで実装されたレスポンシブイメージってどうなのよ?
- WordPress 4.4以降でのレスポンシブ・イメージ・プラグインはどうなるの?
- WordPressの過去記事を自動でSNS投稿してくれる「Revive Old Post」の文字化け解消方法
- WordPressデータベースの復元の際、wp_commentmetaでエラーが出る件
- WordPressの記事一覧に件数を指定してアイキャッチ画像を表示する方法
- WordPressの投稿にURLだけでYouTube動画を埋め込む際のHTMLをカスタマイズする方法
- WordPressの投稿でSVG画像を使えるようにしても、OGPやTwitter Cardsで対応してなかった件
- さくらのレンタルサーバー上のWordPressの常時SSL化でハマりまくったのでシェアしておきます
- WordPress 4.9.9でSVGがアップロードできない!原因と応急処置
- WordPressデータベース復元の際にphpMyAdminで「Incorrect format parameter」エラーが出た時の対処法
- Local(macOS)のSSLのFirefoxの警告を回避する方法
参照した情報
- Mastering WordPress Shortcodes — Smashing Magazine
- テンプレートタグ/get posts — WordPress Codex 日本語版
- テンプレートタグ/query posts — WordPress Codex 日本語版
2016年1月30日に公開され、2017年2月25日に更新された記事です。
About the author
「明日のウェブ制作に役立つアイディア」をテーマにこのブログを書いています。アメリカの大学を卒業後、ボストン近郊のウェブ制作会社に勤務。帰国後、東京のウェブ制作会社に勤務した後、ウェブ担当者として日英バイリンガルのサイト運営に携わる。詳しくはこちら。
ウェブ制作・ディレクション、ビデオを含むコンテンツ制作のお手伝い、執筆・翻訳のご依頼など、お気軽にご相談ください。いずれも日本語と英語で対応可能です。まずは、Mastodon @rriver@vivaldi.net 、Twitter @rriver 、またはFacebook までご連絡ください。