work.log

元エンジニアの備忘録的ブログ

TwentyTwelveでカテゴリとタグで絞り込んだ関連記事を表示

投稿:

WordPress のテーマ TwentyTwelve のカスタマイズ記事です。

以下の記事で関連記事について書きましたが、この関数「いずれかのタグを含む」という条件だけあって精度が非常にイマイチです。

関連記事

TwentyTwelveでプラグインを使わずに関連記事を表示

このブログの場合、多くても 2 つくらいしかタグを付けないのでまだマシですが、タグを気軽に付けまくるともう何処が関連なのかよくわからない状態に。

という事で、「カテゴリが一致し、いれずれかのタグを含んだ場合」という具合に少しだけ関連性の精度を上げてみたいと思います。

WordPressの記事を複合条件で検索する

WP_Query の検索条件を要件に合うように変更してみます。

まずは関連記事を表示させるコード全体から。

function get_relation_post( $post ) {

	$cat = wp_get_post_categories( $post->ID );
	$tag = wp_get_post_tags( $post->ID );

	if ( $cat && $tag ) {

		$tag_array = array();

		foreach ( $tag as $value ) {
			array_push( $tag_array, $value->term_id );
		}

		$args = array(
			'posts_per_page'      => 5,  // 表示数
			'post__not_in'        => array( $post->ID ), // 現在の記事は含めない
			'ignore_sticky_posts' => 1,  // 固定表示を除外
			'orderby'             => rand,
			'tax_query' => array( 
				'relation' => 'AND',
				array(
					'taxonomy' => 'category',
					'terms'    => $cat,
					'field'    => 'id',
					'operator' => 'AND'
				),
				array(
					'taxonomy' => 'post_tag',
					'terms'    => $tag_array,
					'field'    => 'id',
					'operator' => 'IN'
				)
			)
		);

		$my_query = new WP_Query( $args );

		if( $my_query->have_posts() ) {

			echo '<h3>関連記事</h3>';
			echo '<ul>';

			while ( $my_query->have_posts() ) : $my_query->the_post();

				$permalink = get_permalink();
				$title     = get_the_title();

				echo '<li>';
				echo auto_post_thumbnail( array( 80, 80 ) );
				echo "<h4><a href='$permalink' title='$title'>$title</a></h4>";
				echo '</li>';

			endwhile;

			echo '</ul>';
			wp_reset_query();

		}
	}

	return;

}

こんな感じに tax_query を使ってカテゴリとタグの複合条件を作ってみました。

関連記事が表示される条件を簡単に上げるとこんな具合です。

  1. 全てが同じカテゴリに登録されている。
  2. または、その子カテゴリに登録されている。
  3. かつ、タグのいずれかが一致する。

この条件下での具体的な例を以下に書いてみます。

  • 投稿1 (カテゴリ1, タグ1, タグ2 に登録)
  • 投稿2 (カテゴリ2, タグ2, タグ3 に登録)
  • 投稿3 (カテゴリ1, カテゴリ3, タグ1 に登録)

この場合、各投稿ページに表示される関連記事は以下の様な感じです。

  • 投稿1 → 投稿3 が関連記事として表示
  • 投稿2 → 何も表示されない
  • 投稿3 → 何も表示されない

これで少しは精度が上がったんじゃないかと思います。

簡単ですが、カテゴリとタグで絞り込んだ関連記事を表示させるについては以上です。

参考にしたページ
WordPress Codex – WP Query