¿Ha tenido un campo de autocompletar funcionando durante meses pero ha dejado de funcionar cuando no ha iniciado sesión? No estoy seguro de cuándo pero dentro de los últimos días o semana (WordPress no actualizado recientemente).
ya tengo; add_action ('wp_ajax_filter_schools', 'filter_schools'); add_action ('wp_ajax_nopriv_filter_schools', 'filter_schools');
en functions.php y no hay errores en ningún lado.
la respuesta que obtengo cuando no estoy conectado es; 
from safari ... * URL de solicitud: http: //www.payingforit.org.uk/wp-admin/admin-ajax.php? term = holywe & action = filter_schools & postType = school Método de solicitud: GET Código de estado: 302 encontrado *
cualquier ayuda bienvenida! Corriente continua.
código jquery
 $( "#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) }
});
funcion en 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
}

Código de trabajo final antes de la función filter_schools ().
fuente