लॉग इन न होने पर ajax ने काम करना बंद कर दिया?


9

क्या एक स्वत: पूर्ण क्षेत्र में महीनों तक काम किया है, लेकिन लॉग इन नहीं होने पर काम करना बंद कर दिया है? निश्चित नहीं है कि कब लेकिन पिछले कुछ दिनों या सप्ताह के भीतर (हाल ही में अपडेट नहीं किया गया वर्डप्रेस)।

पहले से ही है; add_action ('wp_ajax_filter_schools', 'filter_schools'); add_action ('wp_ajax_nopriv_filter_schools', 'filter_schools');

फ़ंक्शन में। कहीं भी कोई त्रुटि नहीं है।

प्रतिक्रिया जब मैं लॉग इन नहीं है;
सफारी से ... * अनुरोध URL: http: //www.payingforit.org.uk/wp-admin/admin-ajax.php? term = sacwe & 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) }

});

function.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;

मुझे लगता है कि वर्डप्रेस लॉग-इन नहीं करने वाले उपयोगकर्ताओं के लिए स्वचालित रूप से अजाक्स कार्रवाई नहीं करता है। संभावित रूप से गैर-उपयोगकर्ता वे चीजें कर सकते हैं जो वे करने में सक्षम नहीं हैं।

मैं शायद उन $_GETएस एंड %_POSTएस को $_REQUESTभी बदल दूंगा।


धन्यवाद स्टीफन - उन अद्यतनों को बनाया, लेकिन अभी भी काम नहीं कर रहा है जब लॉग इन नहीं किया गया।
v3nt

थोड़ा-सा गड़बड़ करने के बाद लगता है कि do_action को add_filter के बाद आना है। अब काम कर रहा है धन्यवाद स्टीफन ...
v3nt

मुझे गैर-व्यवस्थापक उपयोगकर्ताओं के साथ एक ही समस्या थी। इस समाधान ने इसे बनाया, और यह आदेश मेरे मामले में भी महत्वपूर्ण था।
ब्रासोफिलो

2

फ़िल्टर_स्कूल () फ़ंक्शन से पहले अंतिम कार्य कोड।

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;

डैनियल, ऑर्डर को कोई फर्क नहीं पड़ता: मेरे पास एक प्लग-इन है जहां do_actions शीर्ष पर हैं, और add_actions फ़ंक्शन को कॉल किए जाने से ठीक पहले आते हैं। इसके अलावा Add_actions को 'if' स्टेटमेंट के अंदर होने की जरूरत नहीं है। लेकिन अगर उपरोक्त काम करता है, तो यह काम करता है!
स्टीफन हैरिस
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.