posts_where (ok)

https://developer.wordpress.org/reference/hooks/posts_where/

-- === Khi chưa sử dụng posts_groupby một một bài viết có thể lặp lại nhiều lần vì sử dụng các mệnh đề OR trong AND như -- 1 --- hoặc -- 3 --- === 
SELECT wp_posts.*,wp_postmeta.* FROM wp_posts JOIN wp_postmeta 
ON (wp_postmeta.post_ID = wp_posts.ID) WHERE 1=1
AND ((wp_posts.post_title LIKE '%a%') OR (wp_posts.post_excerpt LIKE '%a%') OR (wp_postmeta.meta_key = 'test' AND wp_postmeta.meta_value LIKE '%a%')) -- 1 ---
AND wp_posts.post_type IN ('post', 'page', 'attachment') -- 2 ---
AND (wp_posts.post_status = 'publish' OR wp_posts.post_status = 'acf-disabled' AND wp_posts.post_status = 'private') -- 3 ---
ORDER BY wp_posts.post_title LIKE '%a%' DESC, wp_posts.post_date DESC LIMIT 0, 10;
-- === Khi sử dụng posts_groupby một một bài viết không lặp lại nữa vì ngôn ngữ sql sẽ đánh dấu điều kiện OR trong AND như -- 1 --- hoặc -- 3 --- và bỏ qua nếu chúng đã tìm được đúng 1 điều kiện === 
SELECT  wp_posts.ID FROM wp_posts JOIN wp_postmeta ON (wp_postmeta.post_ID = wp_posts.ID) WHERE 1=1 
AND ((wp_posts.post_title LIKE '%a%') OR (wp_posts.post_excerpt LIKE '%a%') OR (wp_postmeta.meta_key = 'test' AND wp_postmeta.meta_value LIKE '%a%'))  -- 1 ---
AND wp_posts.post_type IN ('post', 'page', 'attachment')  -- 2 ---
AND (wp_posts.post_status = 'publish' OR wp_posts.post_status = 'acf-disabled' OR wp_posts.post_author = 1 AND wp_posts.post_status = 'private')  -- 3 ---
GROUP BY wp_posts.ID 
ORDER BY wp_posts.post_title LIKE '%a%' DESC, wp_posts.post_date DESC LIMIT 0, 10
-- === Khi sử dụng posts_where việc viết luôn mệnh đề -- 4 --- mang sự lựa chọn độc lập hơn như cách chúng ta viết trong posts_search === 
SELECT wp_posts.ID FROM wp_posts JOIN wp_postmeta ON (wp_postmeta.post_ID = wp_posts.ID) 
AND ((wp_posts.post_title LIKE '%a%') OR (wp_posts.post_excerpt LIKE '%a%') OR (wp_postmeta.meta_key = 'test' AND wp_postmeta.meta_value LIKE '%a%'))  -- 1 ---
AND wp_posts.post_type IN ('post', 'page', 'attachment')  -- 2 ---
AND (wp_posts.post_status = 'publish' OR wp_posts.post_status = 'acf-disabled' OR wp_posts.post_author = 1 AND wp_posts.post_status = 'private')  -- 3 ---
AND ID IN (SELECT object_id FROM wp_term_relationships WHERE term_taxonomy_id = 1 ) -- 4 ---
GROUP BY wp_posts.ID 
ORDER BY wp_posts.post_title LIKE '%a%' DESC, wp_posts.post_date DESC LIMIT 0, 10

Default post_where

" AND wp_posts.post_type = 'post' AND (wp_posts.post_status = 'publish' OR wp_posts.post_status = 'acf-disabled' OR wp_posts.post_status = 'private')"
" AND wp_posts.post_name IN ('front-page') AND (0 = 1) AND wp_posts.post_type = 'wp_template' AND ((wp_posts.post_status = 'publish'))"
" AND wp_posts.post_name IN ('home','index') AND ( 0 = 1) AND wp_posts.post_type = 'wp_template' AND ((wp_posts.post_status = 'publish'))"

Add clause where

add_filter( 'posts_where' , 'posts_where' );
function posts_where( $where ) {
  global $wpdb;
  $author = 1;
  $where .= " AND ID IN (SELECT object_id FROM {$wpdb->term_relationships} WHERE term_taxonomy_id = $author )";
  echo '<pre>';
  	var_export($where);
  echo '</pre>';
  return $where;
}
=== Default ===
" AND wp_posts.post_type = 'post' AND (wp_posts.post_status = 'publish' OR wp_posts.post_status = 'acf-disabled' OR wp_posts.post_status = 'private')"
" AND wp_posts.post_name IN ('front-page') AND (0 = 1) AND wp_posts.post_type = 'wp_template' AND ((wp_posts.post_status = 'publish'))"
" AND wp_posts.post_name IN ('home','index') AND ( 0 = 1) AND wp_posts.post_type = 'wp_template' AND ((wp_posts.post_status = 'publish'))"
=== Add $where .= " AND ID IN (SELECT object_id FROM {$wpdb->term_relationships} WHERE term_taxonomy_id = $author )"; ===
 " AND wp_posts.post_type = 'post' AND (wp_posts.post_status = 'publish' OR wp_posts.post_status = 'acf-disabled' OR wp_posts.post_status = 'private') AND ID IN (SELECT object_id FROM wp_term_relationships WHERE term_taxonomy_id = 1 )'
 " AND wp_posts.post_name IN ('front-page') AND ( 0 = 1) AND wp_posts.post_type = 'wp_template' AND ((wp_posts.post_status = 'publish')) AND ID IN (SELECT object_id FROM wp_term_relationships WHERE term_taxonomy_id = 1 )"
 " AND wp_posts.post_name IN ('home','index') AND ( 
  0 = 1
) AND wp_posts.post_type = 'wp_template' AND ((wp_posts.post_status = 'publish')) AND ID IN (SELECT object_id FROM wp_term_relationships WHERE term_taxonomy_id = 1 )"

Last updated