Full post_... (ok)

https://wordpress.stackexchange.com/questions/339194/how-do-i-use-posts-distinct-correctly

function intercept_query_clauses($pieces) {
  echo '<style>#post-clauses-dump { display: block; background-color: #777; color: #fff; white-space: pre-line; }</style>';
  if (current_user_can('manage_options')) {
    $dump = var_export($pieces, true);
    echo "<pre id='post-clauses-dump'>{$dump}</pre>";
  }
  return $pieces;
}
add_filter('posts_clauses', 'intercept_query_clauses', 20, 1);
add_action('pre_get_posts', 'my_make_search_exact', 10);
function my_make_search_exact($query){
    if(!is_admin() && $query->is_main_query() && $query->is_search) :
        $query->set('exact', true);
    endif;
}
function __adapted_search_function($search, $query) {
  if(is_admin() || !$query->is_main_query() || !$query->is_search) return;
  global $wpdb;
  $search_term = $query->get('s');
  $search = " AND (";
	  $search .= "($wpdb->posts.post_title LIKE '%$search_term%')";
	  $search .= " OR ";
	  $search .= "($wpdb->posts.post_excerpt LIKE '%$search_term%')";
	  $search .= " OR ";
	  $search .= "($wpdb->postmeta.meta_key = 'test' AND $wpdb->postmeta.meta_value LIKE '%$search_term%')";
  $search .= ") ";
  add_filter("posts_join",'__custom_join_tables');
  add_filter( 'posts_groupby', 'my_posts_groupby' );
  add_filter( 'posts_where' , 'posts_where' );
  add_filter('posts_fields','custom_posts_fields');
  add_filter('post_limits','custom_posts_limits');
  add_filter('posts_distinct','custom_posts_distinct');
  return $search;
}
function posts_where( $where ) {
  global $wpdb;
  $author = 1;
  $where .= " OR ID IN (SELECT object_id FROM {$wpdb->term_relationships} WHERE term_taxonomy_id = $author )";
  return $where;
}
function __custom_join_tables($joins) {
  global $wpdb;
  $joins .= "JOIN $wpdb->postmeta ON ($wpdb->postmeta.post_ID = $wpdb->posts.ID)";
  return $joins;
}
function my_posts_groupby($groupby) {
  global $wpdb;
  $groupby = " {$wpdb->posts}.ID ";
  return $groupby;
}
function custom_posts_fields($fields) {
	global $wpdb;
	$fields = "{$wpdb->posts}.post_title, {$wpdb->posts}.post_content";
	return $fields;
}
function custom_posts_limits($limits) {
	global $wpdb;
	$limits = "LIMIT 0, 2";
	return $limits;
}
function custom_posts_distinct() {
	return "DISTINCT";
}
add_action('posts_search', '__adapted_search_function',1,2);

Đọc thêm How do I use `posts_distinct` correctly?

Last updated