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

Add clause where

Last updated

Was this helpful?