ど素人から毛を生やす。<延>

シングルページで自分の所属するカテゴリの「自分を除いた」一覧を作る方法

Web > WordPress > カテゴリー 2015年6月5日(最終更新:1年前)

このページは2015.6.5に作成されています。時代の流れとそぐわない可能性があったり、僕が今以上のど素人だった頃の記事だったりするので、新しい記事を探してみるのも良いかもしれません。

どもです。

WordPressで企業サイトの製品情報ブログなんかを管理する場合、シングルページに「同じカテゴリの他の記事」へのリンクをつけることがままあると思います。

僕自身、1年くらい前に手がけたサイトでそういうことをやりまして、此度、それを別のサイトに導入したいという流れになりまして。

久しぶりに開いたそのプログラムが、かなりぐちゃぐちゃだったので(当時の苦労が偲ばれる...)、今回の導入にあたって見易く修正してみました。
勿体無いのでついでに公開しときます。

<?php
$postId = $post->ID; //現在の記事のIDを取得する
$switch = 0; //$switchを作成
$termss = ''; //空の$termssを作成
$terms = get_the_terms( get_the_ID(), 'タクソノミ名' ); //投稿が所属するタームを取得
if( !empty($terms) ){ //記事がタームに所属しているとき
if( !is_wp_error( $terms ) ){ //記事のタームがエラーを発していないとき
	foreach( $terms as $term ){ //記事が所属するターム(配列)をforeach
		if($term->parent == 3){ //$termのIDが「3」のとき(やりたい内容によって変更する箇所)
			$termss = $termss ."". $term->slug.","; //$termssにカンマ区切りで$termのスラッグを挿入
		}
	}
}
}
$termss = substr($termss, 0, -1); //$termssの最後のカンマを取る
$args=array( //query_postsに入れる設定
	'tax_query' => array(
		array(
			'taxonomy' => 'タクソノミ名',
			'field' => 'slug', //検索フィールドをスラッグに設定
			'terms' => explode(',',$termss) //タームの名称をカンマ区切りで入力
		),
	),
	'post_type' => 'カスタム投稿名',
	'posts_per_page'=> -1 //表示件数(-1で全ての記事を表示)
);
query_posts( $args );
if(have_posts()): //記事が存在するのなら
	while(have_posts()):the_post(); //記事をforeach
		if($post->ID!=$postId){ //現在の記事IDとループの記事IDが等しくないなら
			$switch = 1; //スイッチをonに
		}
	endwhile;
endif;
if($switch==1): //スイッチがonのとき
?>
<ul>
<?php
	while(have_posts()):the_post(); //記事をforeach
		if($post->ID!=$postId){ //現在の記事IDとループの記事IDが等しくないなら
?>
<li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
<?php
		}
	endwhile;
?>
</ul>
<?php
endif;
wp_reset_query()
?>

記事のループだけで2回も回してしまってますし、まだまだ改善の余地がありそうです。

カスタム投稿に対応させてますので、通常投稿の場合は、
「タクソノミ名」→「category」「カスタム投稿名」→「post」
で大丈夫だったハズです。確認してませんが。

この記事は役に立ちましたか?
  • _(:3」∠)_ 面白かった  (0)
  • (・∀・) 参考になった (0)
  • (`・ω・´) 役に立った (0)