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

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

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

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)