function list_searcheable_acf() { $list_searcheable_acf = [ 'page_text', 'page_brd_title', 'page_brd_text', 'page_cnt_title', 'page_prj_title', 'page_prj_text', 'page_frl_title', 'page_frl_text', 'cnt_fname', 'cnt_sname', 'cnt_post', 'cnt_contacts', 'cnt_text', ]; return $list_searcheable_acf; } /** * [advanced_custom_search search that encompasses ACF/advanced custom fields and taxonomies and split expression before request] * @param [query-part/string] $where [the initial "where" part of the search query] * @param [object] $wp_query [] * @return [query-part/string] $where [the "where" part of the search query as we customized] * see https://vzurczak.wordpress.com/2013/06/15/extend-the-default-wordpress-search/ * credits to Vincent Zurczak for the base query structure/spliting tags section */ function advanced_custom_search($where, $wp_query) { global $wpdb; if (empty($where)) return $where; // get search expression $terms = $wp_query->query_vars['s']; // https://trello.com/c/JYKEOORU/27-поиск-на-глобал#comment-5e9435ad5214d57738ad73a1 // изменение порядка вывода по запросу $wp_query->query_vars['orderby'] = 'date'; $wp_query->query_vars['order'] = 'desc'; $wp_query->query_vars['search_orderby_title'] = []; // \Dk\Helper\Utils::dump($wp_query); // explode search expression to get search terms $exploded = explode(' ', $terms); if ($exploded === FALSE || count($exploded) == 0) $exploded = array(0 => $terms); // reset search in order to rebuilt it as we whish $where = ''; // get searcheable_acf, a list of advanced custom fields you want to search content in $list_searcheable_acf = list_searcheable_acf(); foreach ($exploded as $tag) { $where .= " AND ( ($wpdb->posts.post_title LIKE '%$tag%') OR ($wpdb->posts.post_content LIKE '%$tag%') OR EXISTS ( SELECT * FROM $wpdb->postmeta WHERE post_id = $wpdb->posts.ID AND ("; foreach ($list_searcheable_acf as $searcheable_acf) : if ($searcheable_acf == $list_searcheable_acf[0]) : $where .= " (meta_key LIKE '%" . $searcheable_acf . "%' AND meta_value LIKE '%$tag%') "; else : $where .= " OR (meta_key LIKE '%" . $searcheable_acf . "%' AND meta_value LIKE '%$tag%') "; endif; endforeach; $where .= ") ) )"; } return $where; } add_filter('posts_search', 'advanced_custom_search', 500, 2); get_header(); ?>