ajax ngừng hoạt động khi không đăng nhập?


9

Đã có một trường tự động hoàn thành làm việc trong nhiều tháng nhưng đã ngừng hoạt động khi không đăng nhập? Không chắc chắn khi nào nhưng trong vài ngày hoặc tuần qua (không cập nhật wordpress gần đây).

đã có; add_action ('wp_ajax_filter_schools', 'filter_schools'); add_action ('wp_ajax_nopriv_filter_schools', 'filter_schools');

trong hàm.php và không có lỗi ở bất cứ đâu.

Phản hồi tôi nhận được khi không đăng nhập là;
từ safari ... * URL yêu cầu: http: //www.payingforit.org.uk/wp-admin/admin-ajax.php? thuật ngữ

bất kỳ trợ giúp chào mừng! Đc.

mã 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) }

});

chức năng trong hàm.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âu trả lời:


6

Chỉnh sửa: Tôi đã giữ câu trả lời ban đầu của mình bên dưới, tuy nhiên, tôi không chắc mình đang nghĩ gì ... Bạn không bao giờ cần phải kích hoạt do_action( 'wp_ajax...' ).

Mặc dù tôi không thể chắc chắn vấn đề là gì, nhưng mã trong câu hỏi gần như ổn (tôi nghĩ $_POSTnên $_GET.getJSON).


Hãy thử đặt nó lên hàng đầu ...

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

Tôi nghĩ rằng WordPress không tự động thực hiện các hành động ajax cho người dùng không đăng nhập. Những người không phải là người dùng có thể làm những việc mà họ không cho là có thể làm được.

Tôi có lẽ sẽ thay đổi những $_GETs & %_POSTs để $_REQUESTquá.


cảm ơn Stephen - đã thực hiện các cập nhật đó nhưng nó vẫn không hoạt động khi chưa đăng nhập.
v3nt

sau khi loay hoay một chút, có vẻ như do_action phải đến sau add_filter. Làm việc ngay bây giờ, cảm ơn từng bước ...
v3nt

Tôi gặp vấn đề tương tự với người dùng không phải quản trị viên. Giải pháp này đã làm được, và thứ tự cũng quan trọng trong trường hợp của tôi.
brasofilo

2

Mã làm việc cuối cùng trước hàm 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;

Daniel, thứ tự không quan trọng: Tôi có một trình cắm trong đó các do_ilities nằm ở đầu và add_ilities xuất hiện ngay trước khi hàm được gọi. Ngoài ra, add_ilities không cần phải nằm trong câu lệnh 'if'. Nhưng nếu các công trình trên, thì nó hoạt động!
Stephen Harris
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.