Un champ de saisie semi-automatique a-t-il fonctionné pendant des mois mais a cessé de fonctionner s'il n'est pas connecté? Je ne sais pas quand mais au cours des derniers jours ou de la semaine (wordpress non mis à jour récemment).
j'ai déjà; add_action ('wp_ajax_filter_schools', 'filter_schools'); add_action ('wp_ajax_nopriv_filter_schools', 'filter_schools');
dans functions.php et il n'y a aucune erreur n'importe où.
la réponse que je reçois quand je ne suis pas connecté est;
from safari ... * URL de la demande: http: //www.payingforit.org.uk/wp-admin/admin-ajax.php? term = holywe & action = filter_schools & postType = school Méthode de demande: GET Code de statut: 302 trouvés *
toute aide bienvenue! 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) }
});
fonction dans functions.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
}
Edit: J'ai gardé ma réponse originale ci-dessous, cependant, je ne suis pas sûr de ce que je pensais ... Vous devriez jamais devez déclencher do_action( 'wp_ajax...' )
.
Bien que je ne sois pas sûr de la nature du problème, le code de la question est globalement correct (je pense que $_POST
devrait être $_GET
avec .getJSON
).
Essayez de mettre ceci en haut ...
if(isset($_REQUEST['action']) && $_REQUEST['action']=='filter_schools'):
do_action( 'wp_ajax_' . $_REQUEST['action'] );
do_action( 'wp_ajax_nopriv_' . $_REQUEST['action'] );
endif;
Je pense que WordPress ne fait pas automatiquement des actions ajax pour les utilisateurs non connectés. Potentiellement, les non-utilisateurs pourraient faire des choses qu'ils ne sont pas supposés être capables de faire.
Je changerais probablement ces $_GET
s & %_POST
s en $_REQUEST
aussi.
Code de travail final avant la fonction 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;