get_comments で複数の投稿タイプを取得する

複数のカスタム投稿タイプのコメントをまとめて取得したい での回答した内容の備忘録(と、若干のコードリファクタリング)

get_comments で指定できるパラメーターは、文字列形式のみで、配列やカンマ区切りによる複数指定はできません。
これは、内部でSQL文を構成する際に、prepare メソッドを用いて文字列や数字にはめ込んでいるためです。
ただし、comments_clauses というフィルターフックが用意されていて、SQL文のほぼ全ての句を変更することができるようになっています。

function multi_post_type_comments_where( $clauses, $comment_query ) {
	global $wpdb;
	if ( is_array( $comment_query->query_vars['post_type'] ) ) {
		$post_types = $wpdb->_escape( $comment_query->query_vars['post_type'] );
		$search = $wpdb->prepare( " AND {$wpdb->posts}.post_type = %s", $comment_query->query_vars['post_type'] );
		$replace = " AND {$wpdb->posts}.post_type IN ( '" . implode( "','", $post_types ) . "' )";
		$clauses['where'] = str_replace( $search, $replace, $clauses['where'] );
	}
	return $clauses;
}
add_filter( 'comments_clauses', 'multi_post_type_comments_where', 10, 2 );

回答は、投稿タイプのパラメーター固定ですが、パラメーターを foreach などでループ処理させることで、他のパラメーターについても、配列での複数指定に対応させることは可能なはずです。

WordPressの固定ページで、コメント投稿をできないようにする

WordPress詳しい方に質問します!投稿にはコメント欄をつけたいけど、固定ページにはコメント欄はつけたくない、って言う場合、どうすればよろしいんでしょう??超基本的なこと聞いてたらごめんなさい。。。

深夜にご飯を食べながらツイッターを眺めていると、 @masashi0923 さんが、こんな質問をされていました。
たしかに、ディスカッション設定パネルには、投稿と固定ページで設定を分ける項目もありませんし、固定ページを作るときに、いちいちディスカッションのボックスでコメントを停止することも面倒で、つい忘れてしまうこともありそうです。

なので、固定ページの場合には、強制的にコメントをつけられないようにするコードをささっと書いてみました。(探せばプラグインなどありそうですけどね。。)

“WordPressの固定ページで、コメント投稿をできないようにする” の続きを読む