Я использую фильтр posts_where для того, чтобы изменить пользовательский поиск в сети, но я обнаружил, что некоторые виджеты по умолчанию, такие как «более свежие посты», тоже используют этот фильтр, и их поведение также изменяется. Я пытаюсь найти способ избежать того, чтобы что-то кроме поиска пользователей использовало фильтр posts_where.
Это мой код:
add_filter( 'posts_where' , 'posts_where_statement' );
function posts_where_statement( $where ) {
global $wp_query;
global $expp;
global $wpdb;
$local_db = $wpdb->prefix."posts";
$front_page_id = get_option('page_on_front');
if ( ('page' != get_option('show_on_front') || $front_page_id != $wp_query->query_vars['page_id']) && (!($wp_query->is_search)) )
return $where;
//some $where modifications
remove_all_actions ( '__after_loop');
return $where;
}
Есть ли какая-либо другая функция или способ заставить этот хук / фильтр работать только с поисковым запросом? (тот, который выбирает результаты из пользовательского ввода)
$q
хотя.$wp_query
но это может быть перепутано с глобальным$wp_query
, другим использованием$qry
или$query
, но это также может сбить с толку, когда мы работа с SQL-запросом ;-) Я остановился на$q
этом небольшом фрагменте, и он также выглядит проще, чем, например, например.$wp_query_obj
Обычно я беру несколько if-условий в отдельную строку @MichaelEcklund