私はwp-admin /にアクセスしたくない一部のユーザーのために単純なリダイレクトを作成しようとしたので、私はこのコードをしました:
function no_admin_access() {
if ( !current_user_can( 'delete_posts' ) ) {
wp_redirect( site_url( '/' ) ); exit;
}
}
add_action('admin_init', 'no_admin_access');
しかし、それから私がそれらのユーザーとajaxリクエストを行おうとすると、それもリダイレクトされるので、admin-ajax.phpには到達しません
これのために良い仕事をしている人はいますか?
ありがとう。
AJAXコード
$.ajax({
type: 'POST',
url: MyAjax.ajaxurl,
data: {
action: 'mux_ajax_delete_pix',
pid: $this.attr('data-id')
},
success: function(){
$this.parent().fadeOut();
}
});
条件付きチェックでAjaxで定義されているDOING_AJAX
定数をチェックできます。
function no_admin_access()
{
if (
// Don't do this for AJAX calls
! defined( 'DOING_AJAX' )
// Capability check
&& ! current_user_can( 'delete_posts' )
)
{
// Redirect to home/front page
wp_redirect( site_url( '/' ) );
// Never ever(!) forget to exit(); or die(); after a redirect
exit;
}
}
add_action( 'admin_init', 'no_admin_access' );
私は以下の機能を使用しているとそれは私のためにうまく働いています
function remove_admin_access_for_non_editor() { if ( is_admin() && ! current_user_can( 'edit_posts' ) && ! ( defined( 'DOING_AJAX' ) && DOING_AJAX ) ) { wp_redirect( home_url() ); exit; } } add_action( 'init', 'remove_admin_access_for_non_editor' );