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' );
私が作者ページにいるならそれはうまくいきません、しかし私がチェックをするならすべてはうまくいきます。
あなたの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
と同じです - クエリは解析も実行もされないので、利用できるクエリ変数はありません...