web-dev-qa-db-ja.com

'is'関数と 'get_query_var'が機能しない

is関数がAjax関数内で機能しないのはなぜですか? is_user_logged_inを除いて?

私もget_query_varを使ってみましたが、うまくいきませんでした。

jQuery:

jQuery('.post-modal').live('click', function(e) {       

    e.preventDefault();

    var post_id = jQuery(this).data('post-id');

    jQuery.ajax({
        type: 'POST',
        url: mysite.ajax_url,
        data: {
            'action' : 'post_modal_content',
            'post_id' : post_id             
        },                      
        success: function(response) {
            var json = jQuery.parseJSON(response);
            jQuery('#post-modal .content').html(json.html);             
        }                                   
    });     
});

PHP:

function post_modal_content() {

    $post_id = $_POST['post_id'];   

    if (is_author()) {
        set_query_var('post_id', $post_id);
        ob_start();
        get_template_part('content-post-modal');
        $html = ob_get_contents();
        ob_end_clean();  

        $response = array('html' => $html);
        echo json_encode( $response );
        exit;
    }   
}
add_action( 'wp_ajax_post_modal_content', 'post_modal_content' );
add_action( 'wp_ajax_nopriv_post_modal_content', 'post_modal_content' );

私が作者ページにいるならそれはうまくいきません、しかし私がチェックをするならすべてはうまくいきます。

1
Alex

あなたのAJAXリクエストを/wp-admin/admin-ajax.phpに送る(これはとても良いことです)ので、それは典型的なWPリクエストではありません。

そのような要求の間、要求は解析されず、グローバルWP_Queryも作成されません。

is_authorコンディショナルタグ で、作成者アーカイブページが表示されているかどうかを確認します。そのため、設計上、AJAX requestは作成者アーカイブページを表示していないため、AJAX requestの間はfalseが返されます。

一方、AJAXリクエスト中にユーザーはまだログインしているため、is_user_logged_in()は機能します(同じセッションです)。

PS。 get_query_varと同じです - クエリは解析も実行もされないので、利用できるクエリ変数はありません...

2