Ajax- und WP_Query / tax_query-Parameter

Nach eingehender Recherche habe ich alle meine Möglichkeiten ausgeschöpft und beschlossen, hier eine Frage zu stellen. Ich versuche, eine gefilterte Gruppe von Beiträgen über AJAX mithilfe von WP_Query und dem Parameter tax_query zu erhalten.

Ich habe derzeit einen benutzerdefinierten Post-Typ namens “Vokabular Terms” und zwei benutzerdefinierte Taxonomien namens “Vokabular Kategorien” und “Schwierigkeitsgrad”. Im Wesentlichen möchte ich, dass Benutzer eine Kategorie auswählen, dann einen Schwierigkeitsgrad und einen der Beiträge laden, die mit jedem markiert sind. Unten sind meine PHP-functionen und js. Es scheint so, als ob ich nach Vokabular-Begriffen filtern kann, aber in der Sekunde, in der ich versuche, etwas in tax_query weiterzuleiten, scheitert es.

Irgendwelche Ideen?

ajax-spiel-funktionen.php

function get_game_difficulty() { // Nonce check $nonce = $_REQUEST['nonce']; if (!wp_verify_nonce($nonce, 'ajax_scripts_nonce')) die(__('Busted.')); global $wpdb; global $wp_query; global $post; global $terms; $html = ""; $success = false; $gameCategory = $_REQUEST['gameCategory']; $gameDifficulty = $_REQUEST['gameDifficulty']; $html .= '

Listen and repeat each word you hear until you feel comfortable pronouncing each word.

'; $html .= $gameCategory; $html .= $gameDifficulty; $html .= '
    '; $args = array( 'numberposts' => 5, 'post_type' => 'vocabulary_terms', 'tax_query' => array( array( 'taxonomy' => 'vocabulary_categories', 'field' => 'slug', 'terms' => $gameCategory ) ) ); $myposts = get_posts( $args ); foreach( $myposts as $post ) : setup_postdata($post); $title = get_the_title(); $html .= '
  • '.$title.'
  • '; endforeach; $html .= '
'; // Build the response... $success = true; $response = json_encode(array( 'success' => $success, 'html' => $html )); // Construct and send the response header("content-type: application/json"); echo $response; exit; } add_action('wp_ajax_nopriv_get_game_difficulty', 'get_game_difficulty' ); add_action('wp_ajax_get_game_difficulty', 'get_game_difficulty' );

ajax-game-scripts.js

 $(document).on('click', '#vocabulary-games a.difficulty-level', function() { //$('#vocabulary-games a.difficulty-level').click(function(){ // Store category slug in variable var vocab_difficulty = $(this).attr('data-difficulty'); var vocab_cat = $(this).attr('data-category'); // post data to function $.post(ajax_scripts.ajaxurl, { dataType: "jsonp", action: 'get_game_difficulty', nonce: ajax_scripts.nonce, gameDifficulty: vocab_difficulty, gameCategory: vocab_cat }, function(response) { if (response.success===true) { $('#vocabulary-games').children().fadeOut('slow',function(){ //$('#vocabulary-categories').children().hide(1,function(){ $('#vocabulary-games').append().html(response.html); //}); }); } else { alert('!'); // Bad Response message } }); }); // end click 

Solutions Collecting From Web of "Ajax- und WP_Query / tax_query-Parameter"

Ihr Code sieht gut aus, aber er schlägt fehl, weil Ihre benutzerdefinierte Taxonomie nirgendwo in den Aktions-Hooks eines AJAX-Aufrufs registriert wird.

Meine Vermutung ist, dass Sie Ihre benutzerdefinierten Taxonomien gemäß der Taxonomies-Dokumentation registrieren, in der Sie aufgefordert werden, sie dem “init” -Aktionshaken hinzuzufügen. “Init” wird jedoch während eines AJAX-Aufrufs nicht aufgerufen. Es wird nur während einer typischen Seitenanforderung oder einer Verwaltungsseitenanforderung aufgerufen (siehe Action Reference-Dokumentation ). (Hinweis: Die Aktionsreferenzdokumentation im Codex scheint wirklich veraltet zu sein, sie enthält keine Liste von Aktionen, die während einer AJAX-Anfrage ausgeführt werden.)

Umgehung: Wenn Sie Zugriff auf Ihre benutzerdefinierten Taxonomien benötigen, führen Sie die init-Aktion zu Beginn Ihrer Ajax-function wie folgt aus:

 function get_game_difficulty() { do_action("init"); // Code that relies on custom taxonomies being registered can be used below. ... } add_action('wp_ajax_nopriv_get_game_difficulty', 'get_game_difficulty' ); add_action('wp_ajax_get_game_difficulty', 'get_game_difficulty' );