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
Was this helpful?