Post-by-term von der benutzerdefinierten Taxonomie in einem anderen Blog im Netzwerk abrufen?

Ich habe Probleme, Post nach Semester in einer benutzerdefinierten Taxonomie zu bekommen, die ich eingerichtet habe. Der Haken dabei ist, dass es sich um eine Multisite handelt und ich diese Daten von einem anderen Blog im Netzwerk bekomme, in dem die Taxonomie registriert ist. Der Code, den ich habe, funktioniert gut auf dem Blog, mit dem die Taxonomie registriert ist. Wenn ich jedoch den gleichen Code auf dem anderen Blog mit switch_to_blog versuche, bekomme ich bool (false). Ich vermute, dass es einen Fehler in der SQL gibt. Aber wenn ich nur is_term mache, kann ich bestätigen, dass es da ist. Hier ist ein Link zu dem Code, der auf dem naiven Blog funktioniert, aber nicht zu dem anderen,

  
$type, 'posts_per_page' => 6, 'paged' => $paged, 'tax_query' => array( array( 'taxonomy' => 'warrant_status', 'field' => 'id', 'terms' => 'most-wanted', ) ) ); $my_query = null; $my_query = new WP_Query($args); $i = 0; if( $my_query->have_posts() ) { while ($my_query->have_posts()) : $my_query->the_post(); if( $i % 3 == 0) :?>
request)); ?>

Wanted

Arrested

  • Last Known Address:
  • Hair:
  • Eyes:
  • Height:
  • Weight:

* Edit (aktualisiert Pastebin mit switch_to_blog enthalten)

http://pastebin.com/uBbaXnSt

Außerdem gibt dies gar nichts aus, nicht einmal mit print_r(var_dump($my_query->request));


Lösung (oder zumindest teilweise)


Das Problem ist switch_to_blog gibt Ihnen nicht Zugriff auf alles in einem anderen Blog im Netzwerk einschließlich Taxonomien, Tags, Dinge in Ihrer functions.php, aber zitieren Sie mich nicht 100% darauf. Daher wurde die Taxonomie nicht im Blog “switched to” registriert. Meine Lösung (zumindest für jetzt) ​​registrieren Sie die Taxonomie in diesem Blog. Danach funktionierte tax_query wie erwartet. Dies ist, was ich mit gehe, bis ich eine bessere Lösung finde (wenn überhaupt eine existiert).

Solutions Collecting From Web of "Post-by-term von der benutzerdefinierten Taxonomie in einem anderen Blog im Netzwerk abrufen?"

Ich habe einen kleinen Hack gefunden, um nach Taxonomie zu filtern, ohne die Taxonomie im Child-Theme zu erstellen.

Im core existiert die function ” taxonomy_exists “:

 function taxonomy_exists( $taxonomy ) { global $wp_taxonomies; return isset( $wp_taxonomies[$taxonomy] ); } 

Und ist diese function, die “falsch” hive, weil die Taxonomie in Ihrem Kind Thema nicht existiert. Wenn diese function “false” ergibt, gibt die class ” WP_Tax_Query ” kein gültiges SQL zum Filtern nach Taxonomie zurück.

Also, wie @jerime sagt “Meine Lösung (zumindest für jetzt) ​​registrieren Sie die Taxonomie in diesem Blog”.

Sie können eine Taxonomie nur erstellen, um diesen Filter zu erstellen, z. B .:

 // Add this before the loop // The if is to don't touch the taxonomy if is a real taxonomy // The "delete" value is to know this is not a real taxonomy global $wp_taxonomies; if(!taxonomy_exists('warrant_status')) $wp_taxonomies['warrant_status'] = 'delete'; // The normal loop $args=array( 'post_type' => $type, 'posts_per_page' => 6, 'paged' => $paged, 'tax_query' => array( array( 'taxonomy' => 'warrant_status', 'field' => 'id', 'terms' => 'most-wanted', ) ) ); $my_query = null; $my_query = new WP_Query($args); // After finish the loop, remove the hack // do the if to don't delete a real taxonomy if ($wp_taxonomies['warrant_status'] == 'delete') unset($wp_taxonomies['warrant_status']) 

Dies ist eine lange Überlegung und geht davon aus, dass alle Ihre Taxonomien korrekt eingerichtet und abgefragt werden.

Aber da du wp_reset_query() verwendest, versuche query_posts() mit deinen $args und verwende while(have_posts() : the_post()) anstatt eine neue WP_Query() class zu machen. Dann restore_current_blog() vor deinem wp_reset_query() am Ende.

Auch Ihr var_dump funktioniert nicht, da $wp_query nicht $my_query . Wenn Sie den var_dump des $wp_query Objekts sehen $wp_query , müssen Sie global $wp_query; irgendwo davor.

Bessere Antwort ..

Ich weiß nicht, warum ich es vorher nicht bemerkt habe. Das Feld tax_query ist auf id not slug gesetzt. Ändere deine $ args zu ..

 $args = array( 'post_type' => $type, 'posts_per_page' => 6, 'paged' => $paged, 'tax_query' => array( array( 'taxonomy' => 'warrant_status', 'field' => 'slug', 'terms' => 'most-wanted', ) ) ); 

Lösung (oder zumindest teilweise)

Das Problem ist switch_to_blog gibt Ihnen nicht Zugriff auf alles in einem anderen Blog im Netzwerk einschließlich Taxonomien, Tags, Dinge in Ihrer functions.php, aber zitieren Sie mich nicht 100% darauf. Daher wurde die Taxonomie nicht im Blog “switched to” registriert. Meine Lösung (zumindest für jetzt) ​​registrieren Sie die Taxonomie in diesem Blog. Danach funktionierte tax_query wie erwartet. Dies ist, was ich mit gehe, bis ich eine bessere Lösung finde (wenn überhaupt eine existiert).

Das gleiche Problem, meine Lösung:

 $queryterms = " SELECT * FROM wp_".$site->blog_id."_terms terms, wp_".$site->blog_id."_term_taxonomy term_taxonomy, wp_".$site->blog_id."_term_relationships term_relationships WHERE (terms.term_id = term_taxonomy.term_id AND term_taxonomy.term_taxonomy_id = term_relationships.term_taxonomy_id) AND term_relationships.object_id = ".$post->ID." "; $terms = $wpdb->get_results($queryterms, OBJECT); foreach ($terms as $term) { // Your stuff };