LION MEDIA のカスタム投稿タイプの関連記事、アーカイブ表示、ウィジェットの新着

LION MEDIA のカスタム投稿タイプ向けカスタマイズの続きです。

fit社提供のLion Mediaは、非常にスタイリッシュで、テンプレートの記述も分かりやすく、キャッシュ系プラグインを使わなくても高速表示が可能なので、当サイトでも愛用しているのですが、カスタム投稿に関しては完全にサポートされていません。どのテーマ・テンプレートにも共通していえることですが。

当サイトも6種類のカスタム投稿タイプを導入しており、関連記事やウィジェットの新着記事の表示、アーカイブ表示が思うように出来なかったのですが、方法が分かったので、ここに紹介します。

[outline]

カスタム投稿の管理と作成には、Custom Post Type UIを推奨します。自分で完璧にカスタマイズできる方は別として、初心者・中級者、複数のカスタム投稿の利用には、このプラグインが一番確実で、簡単です。以下のカスタマイズも、それを前提にして紹介しています。

カスタム投稿タイプにカテゴリーを設置する

これは必須ではありませんが、関連記事の自動表示やアーカイブ表示を効果的にするなら、カスタム投稿タイプにWPコアのカテゴリーを割り当てた方が確実なので、Custom Post Type UI を使って調整して下さい。
『投稿タイプを編集』>『設定』の最下段に『利用するタクソノミ―』のチェックボックスがあります。
Lion Media カスタム投稿タイプ

カスタム投稿タイプの関連記事を表示する

single.php の『関連記事』を表示するコードに、 ‘post_type’ => array(‘post’, ‘カスタム投稿タイプ 1′,’カスタム投稿タイプ 2’), を追記します。
たとえば、movie と news を関連記事に含める場合。

『現在の記事にタグが設定されている場合』

// 現在の記事にタグが設定されている場合
	  if ( has_tag() ) {
	      // 1.タグ関連の投稿を取得
	      $tags = wp_get_post_tags($post->ID);
	      $tag_ids = array();
	      foreach($tags as $tag):
	          array_push( $tag_ids, $tag -> term_id);
	      endforeach ;
	      $tag_args = array(
	          'post__not_in' => array($post -> ID),
	          'post_type' => array('post','movie','news'), //カスタム投稿も含める
	       'tag__not_in' => $tag_ids,
	          'posts_per_page'=> $max_post_num,
	          'tag__in' => $tag_ids,
	          'orderby' => 'rand',
	      );

同じように、『総件数よりタグ関連の投稿が少ない場合は、カテゴリ関連の投稿からも取得する』『現在の記事にタグが設定されていない場合』にも追記します。
条件設定で、任意のカスタム投稿タイプも含めるわけですね。

私が試したところ、主に同じカスタム投稿内から関連記事が表示されるようになりました。

思うように関連記事が表示できない場合は、追記する場所を増減してみて下さい。

どうしても上手くいかない場合は、『Related Posts by Taxonomy』のようなプラグインを併用することをおすすめします。

カスタム投稿タイプをカテゴリー&タグのアーカイブに含める

WordPressでカテゴリーとタグのアーカイブページにカスタム投稿を含める方法で紹介されているように、functions.php に以下のコードを追記します。

たとえば、当サイトのタグ『技術と産業』に表示される、小説、Notes、映画、それぞれ異なるカスタム投稿タイプですが、一つのタグアーカイブの中に全て表示されています。

投稿タイプの枠を超えて、グローバルにナビゲーションしたい場合は、WPコアのカテゴリーやタグを上手に取り入れると効果的ですよ。

・カテゴリーアーカイブにカスタムポストを含める

//カテゴリーアーカイブにカスタムポストを含める
 
function add_post_category_archive( $wp_query ) {
if ($wp_query->is_main_query() && $wp_query->is_category()) {
$wp_query->set( 'post_type', array('post','movie','news'));
}
}
add_action( 'pre_get_posts', 'add_post_category_archive' , 10 , 1);

・タグアーカイブにカスタムポストを含める

//タグアーカイブにカスタムポストを含める
function add_post_tag_archive( $wp_query ) {
if ($wp_query->is_main_query() && $wp_query->is_tag()) {
$wp_query->set( 'post_type', array('post','movie','news'));
}
}
add_action( 'pre_get_posts', 'add_post_tag_archive' , 10 , 1);

ウィジェットの新着記事にカスタム投稿タイプを含める

Lion Mediaでウィジェットに新着記事を表示する場合、WordPress標準の『最近の投稿』を利用するのが一番見映えがいいです。

しかし、そのままだと一般投稿の新着記事しか表示されないので、functions.phpに追記します。

add_filter('widget_posts_args', 'widget_posts_args_add_custom_type'); 
function widget_posts_args_add_custom_type($params) {
   $params['post_type'] = array('post','movie','news');
   return $params;
}

参照→Including Custom Post Types in “Recent Posts” Widget

他にもカスタム投稿タイプを含めるプラグインなどありますが、デザインが崩れて、かえって不細工になるので、上記の方法で標準ウィジェットを利用されるのをおすすめします。

カスタム投稿のタームを記事下に表示(条件分岐)

カスタム投稿タイプにタームを設定している場合、その記事に属するタームをタグリストのように表示したいですね。
Lion Mediaの場合、get_the_term_list と条件分岐を使えば、複数のカスタム投稿タイプから手軽にタームリストを取得することができます。

・基本の形(複数のカスタム投稿を条件分岐) アイテムは何でも指定可能。

<?php if(get_post_type()=='movie'): ?>
movie に属するアイテムを表示
<?php elseif(get_post_type()=='news'): ?>
news に属するアイテムを表示
<?php else: ?>
それ以外の場合に表示
<?php endif; ?>

Lion Mediaの場合。

php echo get_the_term_list($post->ID, ‘ターム名’, ‘タームリストのタイトル’, ‘ , ‘); でタームリストを出力。

li class=”sub icon-tag” を応用すれば、アイコン付きのタームリストが表示されます。

<?php if(get_post_type()=='movie'): ?>
<p><li class="sub icon-tag"><?php echo get_the_term_list($post->ID, 'movie-term', '映画の種類:', ' , '); ?></li></p>
<?php elseif(get_post_type()=='news'): ?>
<p><li class="sub icon-tag"><?php echo get_the_term_list($post->ID, 'genre', 'ジャンル:', ' , '); ?></li></p>
<?php else: ?>
<p><li class="sub icon-tag"></li></p>
<?php endif; ?>

こういう感じ。
Lion Media カスタム投稿

デザインを変更したい場合は、このあたりを参考にスタイルを適用すればOK。

コピペで使えるリストデザイン34選:CSSで箇条書きをおしゃれに

画像を使わずに、CSSのみでリストアイコンを表現したサンプル 10

おまけ 最終更新日の表示

投稿記事と最終更新日は分けて表示した方が分かりやすいです。
ウィジェットの『記事下エリア』やsingle.phpを使って、次のコードを記入します。
ウィジェットを利用する場合は、プラグイン『PHP Code Widget』『PHP Everywhere』を使って、ウィジェットでもPHPコードが動作するよう調整して下さい。

スタイルは一例です。

<p align="right" style="font-size:15px;margin-bottom:20px;">
[最終更新日]<?php the_modified_date('Y/m/d') ?>
</p>

その他のカスタマイズ

LION MEDIA のカスタム投稿タイプ向けカスタマイズには以下のカスタマイズを紹介しています。

1. カスタム投稿タイプでもSEO対策ができるようにする
2. カスタム投稿タイプでも目次の設定ができるようにする
3. ヘッダーのタイトル部にターム名を表示する
4. 本文下にタームリストを表示
5. ウィジェットの新着記事にカスタム投稿を含める
6. トップページから特定のタームに属する記事を除外する
7. トップページから特定のタームに属する記事を除外する
8. 投稿のウィジェットを並び替える
9. アーカイブにターム名を表示(トップページ、カテゴリーなど)
10. アーカイブのカテゴリー部分に独自の名称を表示(トップページ、カテゴリーなど)

LION MEDIA(LION BLOG)のカスタマイズ

[su_posts template=”templates/list-loop.php” taxonomy=”topics” tax_term=”lion-media” post_type=”word”]

QUOTE CARD

No feeds available.
Morgenrood 曙光

Kindle Unlimited

宇宙文明の根幹を成すレアメタルをめぐる企業の攻防と人間の生き様を描いた本格的な海洋ロマン。専門用語は使わず、予備知識のない人でも分かりやすい内容に仕上がっています。無料PDFも配布中。Kindle Unlimited 読み放題の分冊もリリース。

この記事を書いた人

石田 朋子

文芸愛好家&サブカルチャー・ファン。主に70年代~90年代の作品に思い入れがあります。寺山修司の名言『詩を作るより、田を作れ(揶揄)』をモットーに、好きな作品を次代に伝えることを目標にしています。海外在住につき、現代日本とは相容れない所がありますがご容赦ください。
※ 現在、制作巣ごもり中につき、ほとんど更新していません。