ajax หยุดทำงานเมื่อไม่ได้เข้าสู่ระบบ?


9

มีการเติมข้อความอัตโนมัติฟิลด์ทำงานเป็นเวลาหลายเดือน แต่หยุดทำงานเมื่อไม่ได้เข้าสู่ระบบ? ไม่แน่ใจว่าเมื่อใด แต่ภายในไม่กี่วันหรือสัปดาห์ที่ผ่านมา (ไม่ได้อัปเดต WordPress เมื่อเร็ว ๆ นี้)

มีแล้ว; add_action ('wp_ajax_filter_schools', 'filter_schools'); add_action ('wp_ajax_nopriv_filter_schools', 'filter_schools');

ใน functions.php และไม่มีข้อผิดพลาดทุกที่

การตอบสนองฉันได้รับเมื่อไม่ได้เข้าสู่ระบบคือ;
จากซาฟารี ... * คำขอ URL: http: //www.payingforit.org.uk/wp-admin/admin-ajax.php? term = holywe & action = filter_schools & postType = วิธีการขอโรงเรียน: รับรหัสสถานะ 302

ยินดีต้อนรับความช่วยเหลือใด ๆ ! กระแสตรง.

รหัส 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) }

});

ฟังก์ชั่นใน 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
}

คำตอบ:


6

แก้ไข:ฉันได้เก็บคำตอบเดิมของฉันด้านล่าง แต่ผมไม่แน่ใจว่าสิ่งที่ผมคิดว่า ... คุณควรจะไม่do_action( 'wp_ajax...' )จำเป็นที่จะต้องทริกเกอร์

ในขณะที่ฉันไม่แน่ใจว่าปัญหาคืออะไรรหัสในคำถามนั้นค่อนข้างโอเค (ฉันคิดว่า$_POSTควรจะอยู่$_GETด้วย.getJSON)


ลองวางสิ่งนี้ไว้ที่ด้านบน ...

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

ฉันคิดว่า WordPress ไม่ได้ทำการกระทำ ajax โดยอัตโนมัติสำหรับผู้ใช้ที่ไม่ได้เข้าสู่ระบบ ผู้ที่ไม่ใช่ผู้ใช้อาจทำสิ่งที่พวกเขาไม่ควรทำ

ฉันอาจจะเปลี่ยนสิ่งเหล่า$_GETนี้%_POSTเป็น$_REQUESTเกินไป


ขอบคุณ Stephen - ทำการอัปเดตเหล่านั้น แต่ก็ยังไม่ทำงานเมื่อไม่ได้เข้าสู่ระบบ
v3nt

หลังจากเลอะเทอะไปหน่อยดูเหมือนว่า do_action ต้องมาหลังจาก add_filter การทำงานในขณะนี้เพื่อขอบคุณสตีเฟ่น ...
v3nt

ฉันมีปัญหาเดียวกันกับผู้ใช้ที่ไม่ใช่ผู้ดูแลระบบ วิธีแก้ปัญหานี้สร้างขึ้นและการสั่งซื้อก็สำคัญในกรณีของฉันเช่นกัน
brasofilo

2

รหัสการทำงานขั้นสุดท้ายก่อนฟังก์ชั่น 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 ลำดับไม่สำคัญ: ฉันมีปลั๊กอินที่ do_actions อยู่ด้านบนสุดและ add_actions เกิดขึ้นก่อนที่ฟังก์ชันจะถูกเรียกใช้ นอกจากนี้ add_actions ไม่จำเป็นต้องอยู่ใน 'if' statement แต่ถ้าใช้งานได้แล้วมันก็ใช้งานได้!
Stephen Harris
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.