So ändern Sie den posts_where-Filter nur für die Suchanfrage

Ich verwende den posts_where-Filter, um die Benutzersuche in einem Web zu ändern, aber ich finde heraus, dass einige Standardwidgets wie die “jüngeren Posts” diesen Filter ebenfalls verwenden und ihr Verhalten ebenfalls geändert wird. Ich versuche, einen Weg zu finden, um zu vermeiden, dass etwas anderes als die Suche der Benutzer den posts_where-Filter verwendet.

Das ist mein Code:

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; } 

Gibt es eine andere function oder eine Möglichkeit, diesen Hook / Filter nur mit der Suchanfrage arbeiten zu lassen? (derjenige, der die Ergebnisse von der Benutzereingabe abruft)

Solutions Collecting From Web of "So ändern Sie den posts_where-Filter nur für die Suchanfrage"

Problem:

Das Problem mit Ihrem aktuellen Snippet besteht darin, dass Sie nur das globale Hauptabfrageobjekt überprüfen, unabhängig vom aktuellen Abfrageobjekt.

Problemumgehung:

Beachten Sie, dass das zweite Eingabeargument für den callback des posts_where Filters das aktuelle Abfrageobjekt ist.

Verwenden Sie das, um zu ermitteln, ob es sich um die Hauptsuchanfrage am Frontend handelt:

 add_filter( 'posts_where', function ( $where, \WP_Query $q ) { if( ! is_admin() && $q->is_main_query() && $q->is_search()) // No global $wp_query here { // ... your modifications } return $where; }, 10, 2 ); // Note the priority 10 and number of input arguments is 2 

Es gibt auch den posts_search Filter für den WHERE- posts_search , wenn Sie das ändern müssen.

Aber generell würde ich sagen, nur das generierte SQL von Hand ändern, wenn Sie wirklich keine Alternativen haben und haben müssen.