Ajax hat aufgehört zu arbeiten, wenn nicht eingeloggt?

Hatte ein Autocomplete-Feld monatelang funktioniert, aber funktioniert nicht mehr, wenn es nicht eingeloggt ist? Nicht sicher wann, aber innerhalb der letzten Tage oder Woche (nicht aktualisiert WordPress vor kurzem).

bereits; add_action (‘wp_ajax_filter_schools’, ‘filter_schools’); add_action (‘wp_ajax_nopriv_filter_schools’, ‘filter_schools’);

in functions.php und es gibt nirgends Fehler.

Antwort bekomme ich, wenn nicht eingeloggt ist;
ab Safari … * URL anfordern: http: //www.payingforit.org.uk/wp-admin/admin-ajax.php? term = holywe & action = filter_schools & postType = Schule Anfrage Methode: GET Status Code: 302 Gefunden *

jede Hilfe willkommen! Dc.

jQuery-Code

$( "#userSelectedSchool" ).bind( "keydown", function( event ) { if ( event.keyCode === $.ui.keyCode.TAB && $( this ).data( "autocomplete" ).menu.active ) { event.preventDefault(); } }).autocomplete({ source: function( request, response ) { $.getJSON( "/wp-admin/admin-ajax.php", { term: extractLast( request.term ), action: 'filter_schools', postType: 'school' }, response ); dataToBeSent = { term: extractLast( request.term ), action: 'filter_schools', postType: 'school' } console.log(request.term); }, select: function( event, ui ) { var terms = split( this.value ); // remove the current input terms.pop(); // add the selected item terms.push( ui.item.id ); // add placeholder to get the comma-and-space at the end // ui.item.label terms.push( "" ); this.value = ui.item.label; $('input[name=userSchool]').val(ui.item.urn) return false; }, open: function() { $('.ui-menu').width(300) } }); 

function in functionen.php

 add_action('wp_ajax_filter_schools', 'filter_schools'); add_action('wp_ajax_nopriv_filter_schools', 'filter_schools'); function filter_schools(){ global $wpdb; // this is how you get access to the database $str = $_GET['term']; $action = $_POST['action']; $postType = $_POST['postType']; $finalArgs = array ( 'posts_per_page'=>5, 'order' => 'ASC', 'post_type' => 'school' ); $searchSchools = new WP_Query( $finalArgs ); $mypostids = $wpdb->get_col("select ID from $wpdb->posts where post_title LIKE '".$str."%' "); $args = array( 'post__in'=> $mypostids, 'post_type'=>'school', 'orderby'=>'title', 'order'=>'asc' ); $res = new WP_Query($args); while( $res->have_posts() ) : $res->the_post(); global $post; $EstablishmentNumber = get_post_meta($post->ID,'EstablishmentNumber', true); $URN = get_post_meta($post->ID,'URN', true); $add = get_post_meta($post->ID,'address', true); $schl = array('post_id'=>$post->ID,'id'=>$EstablishmentNumber, 'label'=>$post->post_title.', '.$add['town'].' '.$add['postcode'] , 'value'=>$EstablishmentNumber, 'urn'=>$URN ); $matchedSchools[] = $schl; endwhile; echo json_encode($matchedSchools); wp_reset_postdata(); die(); // this is required to return a proper result } 

Solutions Collecting From Web of "Ajax hat aufgehört zu arbeiten, wenn nicht eingeloggt?"

Edit: Ich habe meine ursprüngliche Antwort unten behalten, aber ich bin mir nicht sicher, was ich dachte … Sie sollten do_action( 'wp_ajax...' ) nie auslösen do_action( 'wp_ajax...' ) .

Obwohl ich nicht sicher sein kann, was das Problem ist, ist der Code in der Frage in etwa ok (ich denke, $_POST sollte $_GET mit .getJSON ).


Versuchen Sie, dies an die Spitze zu stellen …

 if(isset($_REQUEST['action']) && $_REQUEST['action']=='filter_schools'): do_action( 'wp_ajax_' . $_REQUEST['action'] ); do_action( 'wp_ajax_nopriv_' . $_REQUEST['action'] ); endif; 

Ich denke, WordPress führt nicht automatisch Aktionen für Benutzer aus, die nicht eingeloggt sind. Potenziell könnten Nicht-Nutzer Dinge tun, die sie nicht tun können.

Ich würde wahrscheinlich die $_GET s & %_POST s auch zu $_REQUEST .

Endgültiger Arbeitscode vor der function filter_schools ().

 if(isset($_REQUEST['action']) && $_REQUEST['action']=='filter_teachers'): add_action('wp_ajax_filter_teachers', 'filter_teachers'); add_action('wp_ajax_nopriv_filter_teachers', 'filter_teachers'); endif; if(isset($_REQUEST['action'])): do_action( 'wp_ajax_' . $_REQUEST['action'] ); do_action( 'wp_ajax_nopriv_' . $_REQUEST['action'] ); endif;