Lion Media

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

Lion Media

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

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

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

カスタム投稿の管理と作成には、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 のカスタム投稿タイプ向けカスタマイズ

THE THORで管理画面から投稿の検索ができなくなった場合の対処法

LION MEDIAの『カテゴリー新着記事』をカスタマイズ single.php使用

ウィジェット『最近の投稿』を更新日順やID順に変更する WP Queryの応用

既存のdescriptionsをYoast SEOのメタデータ(スニペット)に移行する

>海洋小説『曙光』MORGENROOD

海洋小説『曙光』MORGENROOD

宇宙文明の根幹を支える稀少金属ニムロディウムをめぐる企業と海洋社会の攻防を舞台に描く人間ドラマ。生きる道を見失った潜水艇パイロットと愛を求めるフォルトゥナの娘の恋を通して仕事・人生・社会について問いかける異色の海洋小説です。
Kindle Unlimitedなら読み放題。
Amazonの海洋学ランキングで一位を記録。

CTR IMG

Fatal error: Uncaught Error: Call to undefined function WP_Optimize() in /home/marier/novella.works/public_html/wp-content/plugins/wp-optimize/cache/file-based-page-cache-functions.php:136 Stack trace: #0 [internal function]: wpo_cache('\r\n<!DOCTYPE htm...', 9) #1 /home/marier/novella.works/public_html/wp-includes/functions.php(4344): ob_end_flush() #2 /home/marier/novella.works/public_html/wp-includes/class-wp-hook.php(286): wp_ob_end_flush_all('') #3 /home/marier/novella.works/public_html/wp-includes/class-wp-hook.php(310): WP_Hook->apply_filters('', Array) #4 /home/marier/novella.works/public_html/wp-includes/plugin.php(465): WP_Hook->do_action(Array) #5 /home/marier/novella.works/public_html/wp-includes/load.php(954): do_action('shutdown') #6 [internal function]: shutdown_action_hook() #7 {main} thrown in /home/marier/novella.works/public_html/wp-content/plugins/wp-optimize/cache/file-based-page-cache-functions.php on line 136