WP_Query für benutzerdefinierte Taxonomie funktioniert einwandfrei, schlägt jedoch fehl, wenn wp_ajax_ ausgeführt wird.

Ich verwende WP_Query, um einige Informationen zu Posts basierend auf ihrer benutzerdefinierten Taxonomie zu sammeln. Meine Argumente sind wie folgt:

$args = array( 'posts_per_page'=> -1, 'post_status' => 'publish' ); if ( isset($_POST['tag_id']) ) : $args['tax_query'] = array(array( 'taxonomy' => 'region', 'field' => 'id', 'terms' => $_POST['tax_id'], )); endif; 

Dann gehe ich durch und sortiere meine Daten. Und das funktioniert perfekt. Aber da es eine ziemlich schwere Abfrage ist und für jede Taxonomie-ID angezeigt wird, dachte ich, ich würde sie auf Benutzeranforderung ausführen und die Daten mit wp_ajax_ zurückgeben.

Die gleiche Abfrage scheint alle Argumente von tax_query zu ignorieren, wenn sie über Ajax zurückgegeben werden. Die Argumente sind die gleichen und die richtigen “Bedingungen” werden übergeben. Es ist identisch. Ich kann es nicht herausfinden. Ist das ein Fehler? Es nervt mich.

Aktualisiert, um den Code in Pastebin zu setzen: http://pastebin.com/rxSJ1C2n

Die class ist ganz oben, dann das Bit von jQuery, das ich am Ende eingefügt habe, aber in einer separaten Datei ist.

Solutions Collecting From Web of "WP_Query für benutzerdefinierte Taxonomie funktioniert einwandfrei, schlägt jedoch fehl, wenn wp_ajax_ ausgeführt wird."

Ich sehe Ihren Anruf bei der Ajaxurl nicht in Ihrem Code. Erhalten Sie tatsächlich eine Ajax-Antwort?

Versuchen Sie dieses Javascript:

 jQuery(document).ready( function($) { $("a.getviews").click( function() { var td = $(this).parent(); /* only fetch results once */ $(this).unbind('click').bind('click', function(){return false;}); // replace button with loader $(td).html(''); $.ajax({ type: 'POST', url: ajaxurl, data: { action: "get_views", tax_id: td.attr("id") }, success: function(response) { $("td").html(response); return false; } }); }); }); 

Bei großen Ajax-Antworten kann ich die Ausgabe immer besser puffern.

ob_start(); vor deiner Schleife dann am Ende addiere:

 $response = ob_get_contents(); ob_end_clean(); echo $response; die(1);