1

私はwordpressajax呼び出しを使用して、wordpressテーマfunctions.phpの関数から単純なコンテンツを返しています。ただし、代わりに完全なhtmlページが返されます。

これがajax呼び出しです

<?php   
$ajax_nonce = wp_create_nonce("iwhq_beginner_select_course");
?>

<script type="text/javascript" language="javascript">
jQuery(document).ready(function(){

jQuery("#beg_golf_course").change(function() {  //do this when course changes

//in Wordpress ajaxurl always points to admin-ajax.php
var ajaxurl = '<?php echo admin_url('admin-ajax.php'); ?>';
var course_id = 4; 

//Do the ajax
    jQuery.ajax({
        type: "POST", 
        url: ajaxurl,

        //NOTE - the action parameter calls the function in functions.php
        data: { action: 'select_course_aj', course_id: course_id, _ajax_nonce: '<?php echo $ajax_nonce; ?>' },


        //display alert on success
        success: function(html){ 
            alert(html);
        } 
    }); //close jQuery.ajax(
    return false;

    });
});
</script>

そしてこれはfunctions.phpの関数です

function select_course_func(){
echo $_POST["course_id"];
die();
}

add_action('wp_ajax_select_course_aj','select_course_func');

jquery ajax呼び出しを含むページのHTMLは、実際にはエコーではなくアラートに表示されます。

理由を教えてくれる天才はいますか?

ありがとうマーク

4

2 に答える 2

4

OK、問題は解決しました。上記の私の最後の3つのコメントを参照してください...

!defined('DOING_AJAX')は、ユーザーがajaxリクエストを実行していないことをテストするために使用できる定数です。これを、非管理者をフロントエンドにリダイレクトするためのロジックと組み合わせたところ、現在は機能しています。

/* check the role of current loged in user for redirection */
add_action('admin_init','rt_checkRole');
function rt_checkRole() {

    global $wp_roles;
    $currentrole ='';
    foreach ( $wp_roles->role_names as $role => $name ) {
        if ( current_user_can( $role ) ){
                    $currentrole = $role;
                }
        }
        if(!defined('DOING_AJAX') && (!$currentrole || ($currentrole != 'administrator' && $currentrole != 'editor'))){
            wp_redirect (site_url().'/front-end-login/');
        }
}

https://wordpress.stackexchange.com/questions/26100/redirect-out-of-wp-admin-without-losing-admin-ajax-phpで!defined('DOING_AJAX')について調べました

コメントしてくれたすべての人に感謝します。

于 2012-04-19T14:24:43.417 に答える
0

管理者以外のユーザーに対してajax呼び出しを行う場合は、以下のコードを使用する必要があります。これにより、管理者以外のユーザーのwp-adminアクセスは許可されませんが、ログインまたはログアウトしたすべてのユーザーのajax呼び出しは許可されます。

function my_admin_init(){
    if( !defined('DOING_AJAX') && !current_user_can('administrator') ){
        wp_redirect( home_url() );
        exit();
    }
}
add_action('admin_init','my_admin_init');
于 2014-04-30T12:04:58.557 に答える