ajax berhenti bekerja saat tidak masuk?


9

Pernahkah bidang autocomplete bekerja selama berbulan-bulan tetapi telah berhenti bekerja saat tidak masuk? Tidak yakin kapan tetapi dalam beberapa hari atau minggu terakhir (tidak diperbarui wordpress baru-baru ini).

sudah punya; add_action ('wp_ajax_filter_schools', 'filter_schools'); add_action ('wp_ajax_nopriv_filter_schools', 'filter_schools');

di functions.php dan tidak ada kesalahan di mana pun.

respon yang saya dapatkan ketika tidak masuk adalah;
from safari ... * URL Permintaan: http: //www.payingforit.org.uk/wp-admin/admin-ajax.php? istilah = holywe & action = filter_schools & postType = sekolah Permintaan Metode: GET Kode Status: 302 Ditemukan *

Selamat datang bantuan! Dc.

kode 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) }

});

fungsi di 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
}

Jawaban:


6

Sunting: Saya menyimpan jawaban asli saya di bawah, namun, saya tidak yakin apa yang saya pikirkan ... Anda seharusnya tidak perlu memicu do_action( 'wp_ajax...' ).

Sementara saya tidak bisa memastikan apa masalahnya, apakah kode dalam pertanyaan kira-kira ok (saya pikir $_POSTseharusnya $_GETdengan .getJSON).


Coba letakkan ini di atas ...

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

Saya pikir WordPress tidak secara otomatis melakukan tindakan ajax untuk pengguna yang tidak masuk. Berpotensi non-pengguna bisa melakukan hal-hal yang tidak seharusnya mereka lakukan.

Saya mungkin akan mengubah mereka $_GETs & %_POSTs untuk $_REQUESTjuga.


Terima kasih Stephen - membuat pembaruan itu tetapi masih tidak berfungsi saat tidak masuk.
v3nt

setelah bermain-main sedikit sepertinya do_action harus datang setelah add_filter. Bekerja sekarang jadi terima kasih stephen ...
v3nt

Saya memiliki masalah yang sama dengan pengguna non-admin. Solusi ini berhasil, dan urutannya juga penting dalam kasus saya.
brasofilo

2

Kode kerja terakhir sebelum fungsi 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, urutannya tidak masalah: Saya memiliki plug-in di mana do_actions berada di atas, dan add_actions datang tepat sebelum fungsi dipanggil. Juga add_actions tidak perlu berada di dalam pernyataan 'jika'. Tetapi jika cara di atas berhasil, maka berhasil!
Stephen Harris
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.