WordPressでカスタムクエリを作成し、コメントのついている投稿のみ取得する

WordPressでposts_joinフィルターを使ってカスタムクエリを作成し、コメントのついている投稿のみ取得する方法です。
postsテーブルとcommentsテーブルを結合して、コメントのついている投稿のみ取得するようにしています。

  
この記事は2年以上前に書かれたものです。
情報が古い可能性があります。

検証バージョン

  • WordPress 3.8.1

ソースコード

functions.php

<?php
/**
 * カスタムクエリの作成
 */
add_filter('posts_join', 'comment_search_join' );
function comment_search_join( $join ) {
	global $wpdb;

	// 検索処理の時、コメントがついている投稿のみ取得
	if( is_search() ) {
		$join .= " INNER JOIN {$wpdb->comments} ON {$wpdb->posts}.ID = {$wpdb->comments}.comment_post_ID ";
	}

	return $join;
}

接頭辞が wp の場合、以下の様なSQL文が付加されることになります。

INNER JOIN wp_comments ON wp_posts.ID = wp_comments.comment_post_ID

参考

  

共有やブックマークなど