【旧】SWELLのカスタム投稿タイプのアーカイブで、サムネイル上にターム(カテゴリ)を表示させる方法

新たに記事を書いたので、そちらもご参考ください。(リンクは記事下部記載)

目次

解決案

解決“案”なのであくまでも一例として載せますが、もっとスマートな書き方があるはず。

かなり無理矢理感はあるので、もっと良い方法があれば共有していただけると幸いです。

ではやり方ですが、/lib/pluggable_parts/list_parts.php内のswl_parts__post_list_category関数を参考に、/parts/post_list/thumb.php内に直接タクソノミーを出力する処理を記述します。

「ファイル別れているんだからその通りにしろ!」という声が聞こえなくもないですが、ここはスルーします。

thumbs.phpのif ('on_thumb' === $cat_pos || !empty($cat_data)){}内までは進めますが、そのあとのswl_parts__post_list_categoryがなぜか実行されないため、if文を書き換えてタクソノミーを持っている場合と標準の条件文で2つのルートに分けます。

ちなみにですが、フックを使うという手も考えましたが、この処理に関してはフックはなさそうなので諦めました。

それと、別途functions.phpで「投稿」を非表示にして使えなくする場合は元々の処理を消してあげればいいです。

以下のコードで言えばelse if(){...}ごと消します。

<?php

// 省略

$taxonomy_list = ['cat-news', 'cat-activity', 'cat-seminar']; // カスタム投稿用の全タクソノミー
$terms = get_the_terms($the_id, $taxonomy_list);

// 分岐
if ('on_thumb' === $cat_pos && !is_wp_error($terms)) {
	// タームを出力
	if ($terms) {
		foreach ($terms as $term) {
			echo '<span class="c-postThumb__cat icon-folder" data-cat-id="' . esc_attr($term->term_id) . '">' . esc_html($term->name) . '</span>';
		}
	}
} else if ('on_thumb' === $cat_pos || !empty($cat_data)) {
	// 元々の処理
	SWELL_Theme::pluggable_parts('post_list_category', [
		'post_id' => $the_id,
		'class'   => 'c-postThumb__cat',
	]);
}
?>

では上記コードの説明を少しします。

まずは$taxonomy_listにタクソノミーを配列で格納し、次行でget_the_terms()を使って記事に紐づくタームを配列で全て取得します。

今回始めて知りましたが、get_the_terms()のタクソノミーって配列でもOKなんですよね。

次に、元々記述されていた条件式を元に書き換えていきます。

まずは最初のif()でカテゴリーの表示位置がサムネイルの上になっていることと、$terms(取得したタームの配列)がエラーになっていないかチェックしています。

続けて、$termsが空ではないことを確認し、foreach()で全てのタームを出力します。

ただし今回の使用では1記事1カテゴリー(ターム)という鉄の掟があるので、複数のカテゴリーが出力されることはありませんし、2つ目以降は出力したくないならechoの直後にreturnすればいいです。

最後にelse if()ですが、ここからは元々の処理のままなので、特に言うことはありません。

thumb.phpの階層構造に気をつけながら子テーマを適用すれば問題なく動くはずです。

補足

今回、試行錯誤しながら作っている最中に気づいたのですが、1回の処理の中でget_the_terms()で同じタクソノミーを2回以上取得すると、2回目からはエラーが返ってきます。

なのでget_the_terms()を使う場合はforeach()の外側で使うことをオススメします。

<?php
// どちらもタクソノミーAを取得しようとしている
$get_terms1 = get_the_terms('記事ID', 'タクソノミーA');
$get_terms2 = get_the_terms('記事ID', ['タクソノミーA', 'タクソノミーB']);

/*
結果
$get_terms1 -> タクソノミーAの取得成功
$get_terms2 -> タクソノミーAの取得失敗、タクソノミーBの取得成功

補足

もっとスマートなアプローチ方法の記事をアップしたので、こちらも是非ご参考ください。

あわせて読みたい
【新】SWELLのカスタム投稿タイプのアーカイブで、サムネイル上にターム(カテゴリ)を表示させる方法 【はじめに】 以前にも同じタイトルで記事を投稿しましたが、こちらではよりスマートにタームを表示させる方法をご紹介します。 それでもマジでやり方わからないってと...

この記事が気に入ったら
いいね または フォローしてね!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

CAPTCHA


目次