为什么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\' );
如果我在作者页面上,它就不起作用,但如果我检查一下,一切都正常。
最合适的回答,由SO网友:Krzysiek Dróżdż 整理而成
将AJAX请求发送到/wp-admin/admin-ajax.php
(这很好),所以这不是一个典型的WP请求。
在这种请求期间,不会解析请求,也不会创建全局WP\\U查询,等等。
is_author
是一个Conditional Tag, 检查是否显示作者存档页。所以,根据设计,在AJAX请求期间它将返回false,因为AJAX请求并没有显示作者存档页面。。。
另一方面is_user_logged_in()
工作正常,因为用户在AJAX请求期间仍然登录(这是同一个会话)。
附言,这和get_query_var
- 未分析或执行任何查询,因此没有可用的查询变量。。。