Have had an autocomplete field working for months but has stopped working when not logged in? Not sure when but within the last few days or week (not updated wordpress recently).
already have;
add_action(‘wp_ajax_filter_schools’, ‘filter_schools’);
add_action(‘wp_ajax_nopriv_filter_schools’, ‘filter_schools’);
in functions.php and there are no errors anywhere.
response i get when not logged in is;
from safari…
*Request URL:http://www.payingforit.org.uk/wp-admin/admin-ajax.php?term=holywe&action=filter_schools&postType=school
Request Method:GET
Status Code:302 Found*
any help welcome ! 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 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: I’ve kept my original answer below, however, I’m not sure what I was thinking… You should never need to trigger
do_action( 'wp_ajax...' )
.While I can’t be sure what the issue is, is the code in the question is roughly ok (I think
$_POST
should be$_GET
with.getJSON
).Try putting this at the top…
I think WordPress does not automatically do ajax actions for users not logged-in. Potentially non-users could things they are not suppose to be able to do.
I would probably change those
$_GET
s &%_POST
s to$_REQUEST
too.Final working code before the filter_schools() function.