2012-02-23 21 views
5

मैं कुछ ajax व्यवस्थापक-ajax.php के लिए कॉल और यह बहुत अच्छा काम करता है बनाने के लिए एक प्लगइन अनुकूलित है। मैं एक और साइट पर कोड की नकल की है और यह अब उपयोगकर्ताओं को, जो लॉग इन नहीं हैं के लिए काम करताWordpress व्यवस्थापक-ajax परिणाम अनुप्रेषित

फ़ायरबग से:।

POST http://<subdomain>.<server>/wp-admin/admin-ajax.php 302 Moved Temporarily 1.08s  

GET http://<subdomain>.<server>/ 200 OK 

संपादित: सवाल क्या एक विषय संभवतः रीडायरेक्ट करने के लिए कर सकता है है AJAX अनुरोध। प्लगइन में दो हुक हैं:

add_action('wp_ajax_em_ajax_getEvents', 'em_ajax_getEvents'); // ajax for logged in users 
add_action('wp_ajax_nopriv_em_ajax_getEvents', 'em_ajax_getEvents'); // ajax for not logged in users 

वे दोनों साइट्स पर ठीक काम करते हैं, लेकिन एक थीम किसी भी तरह से लॉग इन उपयोगकर्ताओं से अनुरोधों को पुनर्निर्देशित करती है। चूंकि ये क्रियाएं प्लगइन के लिए विशिष्ट हैं, इसलिए मुझे लगता है कि कहां से दिखना शुरू करना है।

समाधान: add_action('init' समाधान के लिए Ronald Huereca को बिग धन्यवाद, कि 'वास्तव में है जहां हमलावर रीडायरेक्ट में hooking था, व्यवस्थापक क्षेत्र की रक्षा करने की कोशिश में। अब मैं सिर्फ एक सुरक्षित ठीक है कि यहाँ विषय के व्यवस्थापक क्षेत्र समझौता नहीं करता है खोजने की जरूरत है, लेकिन यह भी उन गुमनाम ajax अनुरोध करने के लिए अनुमति देने से अन्य प्लग-इन पंख काटना नहीं है।

// stop users accessing the admin 
add_action('init', array($this, 'prevent_admin_access'), 0); 

function prevent_admin_access() {  

    if (strpos(strtolower($_SERVER['REQUEST_URI']), '/wp-admin') !== false) { 
     $current_user = wp_get_current_user(); 

     if(!user_can($current_user->ID, 'administrator') && (!user_can($current_user->ID, 'contributor'))){ 
      wp_redirect(get_option('siteurl')); 
     } 
    } 
} 
+0

सवाल समस्या के बारे में कुछ नहीं कहा। विस्तृत। – ThinkingMonkey

+0

क्षमा करें, समस्या मुझे पता नहीं क्या ajax अनुरोध व्यवस्थापक-ajax को अनुप्रेषित सकता है सिर्फ इतना है कि है।php क्रियाएं स्वयं हैं, वे ठीक काम करते हैं, तो उस रीडायरेक्ट का कारण बनने के लिए कोई "रास्ते में कैसे जा सकता है"। – Sinetheta

+0

कृपया अनदेखा करें (टिप्पणी हटाएं काम नहीं करता; ( –

उत्तर

10

मेरे पास थीम में कुछ ऐसा ही था। मूल कोडर गैर-व्यवस्थापक उपयोगकर्ता को/wp-admin/क्षेत्र को देखने में सक्षम होने से रोकने की कोशिश कर रहा था।

// Block Access to /wp-admin for non admins. 
function custom_blockusers_init() { 
    if (is_user_logged_in() && is_admin() && !current_user_can('administrator')) { 
    wp_redirect(home_url()); 
    exit; 
    } 
} 
add_action('init', 'custom_blockusers_init'); // Hook into 'init' 

मैं मैं क्या है के लिए इसी तरह स्रोत कोड के लिए अपने विषय की जाँच करेगा:

यहाँ एक उदाहरण है।

जब आपको कोड मिल जाए, तो यह सुनिश्चित करने के लिए एक अतिरिक्त सशर्त जोड़ें कि उपयोगकर्ता को रीडायरेक्ट नहीं किया गया है यदि DOING_AJAX निरंतर परिभाषित किया गया है।

+0

आपने सिर पर नाखून मारा, यह वही था जो उन्होंने उपयोग किया था; मैंने अपने प्रश्न में विवरण शामिल किया है। अब मुझे इसे अक्षम करने के लिए एक सुरक्षित तरीका सोचने की जरूरत है विषय के व्यवस्थापक क्षेत्र समझौता किए बिना ... – Sinetheta

0

परिवर्तन

!user_can($current_user->ID, 'administrator') && (!user_can($current_user->ID, 'contributor')) && !is_ajax() 

लिए शर्त जोड़ !is_ajax()

0

मैं ठीक उसी समस्या थी और यह मेरे लिए काम किया:

function mt_redirect_admin() { 

if (! current_user_can('manage_options') && (! defined('DOING_AJAX') || ! DOING_AJAX)) { 
wp_redirect(site_url()); 
exit; 
} 
} 

add_action('admin_init', 'mt_redirect_admin', 1); 
3

मैं जानता हूँ कि यह अभी भी एक वर्ष सवाल है, लेकिन आप कर सकते हैं एक नज़र देख लो।

LETS तेज यदि व्याख्या पर कोई दिलचस्पी नहीं कोड DO:

function redirect_non_admin_user(){ 
    if (!defined('DOING_AJAX') && !current_user_can('administrator')){ 
     wp_redirect(site_url()); exit; 
    } 
} 


add_action('admin_init', 'redirect_non_admin_user'); 

व्याख्या: इस समस्या के लिए कारण यह है कि या तो प्लग इन इंस्टॉल की कुछ गैर व्यवस्थापक उपयोगकर्ताओं होमपेज में या किसी पृष्ठों जब रीडायरेक्ट कर रहे है वे http://localhost/project/wp-admin जैसे wp-admin तक पहुंचने का प्रयास करते हैं। तो इससे समस्याएं पैदा होती हैं।

तो जब आप व्यवस्थापक तक पहुँचने से गैर व्यवस्थापक पुनः निर्देशित, तो आपको निम्न code.This का उपयोग भी दृश्यपटल में व्यवस्थापक ajax कॉल में काम करेंगे कर सकते हैं।

संबंधित मुद्दे