Abfragen von Posts durch Taxonomie von einer alternativen Netzwerksite

Ich habe 5 Netzwerk-Sites in meinem WordPress Multisite-Setup.

Eine davon ist die “primäre Website”, von der der Rest der anderen Netzwerkseiten Daten abrufen wird.

Ich verwende derzeit WP_Query(); switch_to_blog() abrufen und switch_to_blog() / restore_current_blog(); vor und nach dem Aufruf von WP_Query(); wenn die aktuelle Site nicht die primäre Site ist.

Beiträge, die von der Netzseite geholt werden, werden gut empfangen.

Wenn ich zu einer anderen Site im Netzwerk gehe, die NICHT die primäre Site ist, sollte sie zur primären Site wechseln, um Posts von einem benutzerdefinierten Post-Typ UND einer benutzerdefinierten Taxonomie abzurufen. Sobald Posts gefunden wurden, stelle das aktuelle Blog wieder her.

Die Sub-Sites geben jedoch NULL-Posts zurück. Ich dachte, es wäre seltsam. Also habe ich die Ergebnisse von WP_Query(); abgeladen / verglichen WP_Query(); auf der primären Site und einer der untergeordneten Sites.

Den request des abgefragten Objekts spezifisch notieren.

Anfrage wenn auf der primären Webseite:

 [request] => SELECT SQL_CALC_FOUND_ROWS ples_posts.ID FROM ples_posts INNER JOIN ples_term_relationships ON (ples_posts.ID = ples_term_relationships.object_id) WHERE 1=1 AND ( ples_term_relationships.term_taxonomy_id IN (16) ) AND ples_posts.post_type = 'mbe-sales-listings' AND ((ples_posts.post_status = 'publish')) GROUP BY ples_posts.ID ORDER BY ples_posts.post_date DESC LIMIT 0, 5 

Anfrage wann auf irgendeiner Unterseite:

 [request] => SELECT SQL_CALC_FOUND_ROWS ples_posts.ID FROM ples_posts WHERE 1=1 AND 0 = 1 AND ples_posts.post_type = 'mbe-sales-listings' AND ((ples_posts.post_status = 'publish')) GROUP BY ples_posts.ID ORDER BY ples_posts.post_date DESC LIMIT 0, 4 

Die Beiträge pro Seite sollen unterschiedlich sein, also ist das egal.

Der Punkt ist, wenn die Abfrage von einem der Unterstandorte angefordert wird, scheint es, den benutzerdefinierten Beitragstyp abzufragen, aber es berücksichtigt nicht einmal die benutzerdefinierte Taxonomie.

Hinweis:

Der benutzerdefinierte Post-Typ und alle benutzerdefinierten Taxonomien für diesen benutzerdefinierten Post-Typ sind nur auf dem primären Standort registriert.

Wenn Sie den benutzerdefinierten Posttyp und alle benutzerdefinierten Taxonomien für diesen benutzerdefinierten Posttyp auf allen Unterwebsites registrieren, werden die Posts wie vorgesehen abgerufen.

Ich möchte den benutzerdefinierten Posttyp oder eine der benutzerdefinierten Taxonomien auf keiner der Unterwebsites registrieren. Ich möchte nur, dass sie auf der primären Website registriert sind.

Nun, da Sie die ausführliche Geschichte kennen, kommt hier die Frage …

Gibt es eine Möglichkeit, den benutzerdefinierten Post-Typ und alle benutzerdefinierten Taxonomien nur auf der primären Site zu registrieren und dennoch die erforderlichen Posts von einer der Sub-Sites abrufen zu können?

Ich gehe davon aus, dass es mit einem speziellen $wpdb; Abfrage und NICHT möglich mit switch_to_blog(); , WP_Query(); und restore_current_blog(); .

Wenn es möglich ist, einen speziellen $wpdb; Frage, ich würde gerne Anleitung zu einer sicheren und richtigen SQL-Abfrage, um dies zu tun. Ich möchte nur alle veröffentlichten Posts von einer angegebenen Site-ID, einem angegebenen Post-Typ und einer bestimmten Taxonomie / Term aus abfragen.

Solutions Collecting From Web of "Abfragen von Posts durch Taxonomie von einer alternativen Netzwerksite"

Nach einigem Nachdenken kam ich auf eine mögliche “Lösung”. Es war jedoch nicht genau der Weg, den ich zu gehen hoffte.

Der benutzerdefinierte Post-Typ und alle benutzerdefinierten Taxonomien für diesen benutzerdefinierten Post-Typ müssen auf allen Netzwerkstandorten registriert werden, damit WP_Query(); Abrufen von Posts von der primären Site von einer der untergeordneten Sites im Netzwerk.

Zumindest als eine vorübergehende Lösung habe ich die folgenden Einstellungen angegeben, um die benutzerdefinierten Post-Typen und benutzerdefinierten Taxonomien von den Unter-Sites zu “verbergen”.

Zuerst habe ich zwei globale Variablen angegeben, die ich über mein Plugin verwenden kann. Eine für die primäre Site-ID und eine weitere für die aktuelle Site-ID. Diese Variablen können dann in jede classnmethode oder -funktion globalisiert werden.

 $GLOBALS['mbe_primary_site_id'] = 1; $GLOBALS['mbe_current_site_id'] = get_current_blog_id(); 

Beim Registrieren des benutzerdefinierten Posttyps … habe ich eine Überprüfung hinzugefügt und einige der Registrierungsargumente für die Beitragsart geändert.

 global $mbe_primary_site_id, $mbe_current_site_id; if($mbe_current_site_id != $mbe_primary_site_id){ $args['show_ui'] = false; $args['public'] = false; $args['show_in_menu'] = false; } 

Beim Registrieren der benutzerdefinierten Taxonomien … habe ich eine Überprüfung hinzugefügt und einige der Argumente für die Taxonomieregistrierung geändert.

 global $mbe_primary_site_id, $mbe_current_site_id; if($mbe_current_site_id != $mbe_primary_site_id){ $args['show_ui'] = false; $args['public'] = false; } 

Nun kann ich Posts nach Taxonomie von der primären Site auf einer der Sub-Sites switch_to_blog($mbe_primary_site_id); : switch_to_blog($mbe_primary_site_id); , WP_Query(...); und restore_current_blog();

Ich weiß nicht, ob es einen wirklich soliden Weg gibt. Was ich weiß ist, dass diese Methode funktioniert, und wenn Sie es über $wpdb; tun $wpdb; Abfragen, würde es einige bedingte Logik und Prüfungen beteiligt, vor allem, wenn Sie planen, den Inhalt paginieren.

Es wäre nur mehr ein Schmerz und viel zusätzliche Arbeit, um $wpdb; Für alles, wenn Sie einfach die benutzerdefinierten Post-Typen und benutzerdefinierten Taxonomien auch auf den Unter-Sites registrieren und den Zugriff darauf auf den Unter-Sites verbergen können.