【WordPress】カスタムクエリで重複する投稿を除外する方法|posts_distinct
WordPressではページを表示する際に、データベースに対してSQLクエリを発行しデータを取得しますが、ページに表示する情報をカスタマイズしたい場合に、クエリを修正するカスタムクエリを利用する方法があります。
そのカスタムクエリを利用する際に、データベースのテーブルを結合すると、クエリの結果に同じレコードが含まれることがあります。
その場合、検索結果ページなどで投稿の一覧を表示した際に、条件によっては表示結果に投稿が重複することがあります。
今回は、そのようなカスタムクエリの結果に重複したレコードがある場合に、フィルターフックで重複を除外する方法となります。
カスタムクエリの検索結果で重複する投稿を除外する例
カスタムクエリの結果の重複したレコードを除くには、フィルターフックのposts_distinctを利用します。
以下、例となりfunctions.phpに記述します。例では、検索結果のページの場合に、重複したレコードを除外しています。
function my_posts_distinct() {
if ( is_search() ) {
return "DISTINCT";
}
}
add_filter( 'posts_distinct', 'my_posts_distinct' );