2012-02-23 15 views
5

admin-ajax.phpにいくつかのajax呼び出しを行うプラグインをカスタマイズしました。私は別のサイトへの上のコードをコピーしていないし、それはもはやログインしていないユーザーのために働くWordpress admin-ajaxはエラー302リダイレクトを返します

放火犯から:。

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

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

編集:質問はテーマはおそらくリダイレ​​クトするために何ができるかでありますajaxリクエスト。プラグインは、2つのフックました:

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 

彼らは両方のほとんどのサイト上で正常に動作しますが、一つのテーマは、非何とかログインユーザーからの要求をリダイレクトします。これらのアクションはプラグインに固有のものなので、どこから探し始めるのかは迷っています。

SOLUTION:add_action('init'ソリューションのRonald Huerecaからビッグおかげで、問題のリダイレクトが管理エリアを保護するための試みで、中にフックたところ「正確だという。今私は、テーマの管理領域を妥協しない安全な修正を見つける必要があるだけでなく、他のプラグインがユーザーに匿名の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

申し訳ありませんが、問題はちょうど私がadmin-ajaxにajaxリクエストをリダイレクトできるかどうかわかりません。phpアクションは自分のもので、うまく動作するので、リダイレクトを引き起こす場所はどこにあるのでしょうか? – Sinetheta

+0

無視してください(コメントを削除しないでください;( –

答えて

10

テーマに類似したことがありました。オリジナルのコーダーは、管理者以外のユーザーが/ wp-admin/areaを見ることができないようにしようとしていました。ここで

は例です:

// 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

私は、これはまだ古い質問です知っているが、あなたができます見てみましょう。

はFASTER IF EXPLANATION ON興味を持っていないコードを実行できます

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にアクセスしようとします。これは問題を引き起こします。

管理者以外のユーザーをリダイレクトすると、次のコードを使用することができます。これはadmin ajaxのフロントエンドでも機能します。

関連する問題