So filtern Sie sql nur für einen bestimmten Beitragstyp

Ich habe versucht, eine benutzerdefinierte Tabelle mit einer regulären WordPress-Abfrage, aber nur unter einer bestimmten Bedingung (ein bestimmter Beitragstyp) beizutreten.

Ich habe eine single-event.php Vorlage, die die Hauptabfrage ausführt, und eine sekundäre WP_Query in der Seitenleiste.

ID möchte das SQL für die Hauptabfrage filtern, ohne die sekundäre Abfrage zu beeinträchtigen.

Ich verwende den folgenden Code, leider betrifft es beide Abfragen:

add_filter( 'posts_fields', 'single_posts_fields' ); function single_posts_fields( $sql ) { global $wp_query; if(is_single() && $wp_query->query_vars['post_type'] == 'event') { global $wpdb; $sql = $sql . ", some fields... "; } return $sql; } add_filter( 'posts_join', 'single_posts_join' ); function single_posts_join( $sql ) { global $wp_query; if(is_single() && $wp_query->query_vars['post_type'] == 'performance') { global $wpdb; $table = $wpdb->base_prefix . "events"; $sql = $sql . " LEFT JOIN $table AS something ON something = something "; } return $sql; } 

Der obige Code verbindet erfolgreich eine Tabelle mit vielen Feldern mit dem Post-Objekt. Leider fügt es auch diese sql der Sidebar-Abfrage hinzu, obwohl diese Abfrage nicht vom Post-Typ “event” ist. Ich ändere das, wenn ich die globale $ wp_query bekomme, wenn ich die “main” -Abfrage bekomme, und da die Hauptabfrage für single-event.php vom Posttyp “event” ist, wird dies jede Abfrage auf der Seite beeinflussen, auch wenn es in seinem eigenen WP_Query-Objekt.

Wie kann ich das umgehen und sicherstellen, dass es nur die Hauptabfrage für single-event.php bewirkt?

Solutions Collecting From Web of "So filtern Sie sql nur für einen bestimmten Beitragstyp"

Wie @bonger sagte, lassen Sie Ihre Filter ein zweites Argument akzeptieren, das die Instanz von WP_Query , die den Filter ausführt, und prüfen, ob es sich tatsächlich um die Hauptabfrage für ein Ereignis handelt:

 function single_posts_fields( $sql, $wp_query ) { if ( $wp_query->is_main_query() && $wp_query->is_singular( 'event' ) ) { // Do your stuff } } add_filter( 'posts_fields', 'single_posts_fields', 10, 2 /* Number of accepted arguments */ ); function single_posts_join( $sql, $wp_query ) { if ( $wp_query->is_main_query() && $wp_query->is_singular( 'event' ) ) { // Do your stuff } } add_filter( 'posts_join', 'single_posts_join', 10, 2 /* Number of accepted arguments */ );