尝试使用wp_doing_ajax() 像这样:
function unset_filter_session() {
if ( ! wp_doing_ajax() ) {
//Reset sessions on refresh page
unset( $_SESSION[\'expenditure_filter\'] );
}
}
更新您可以检查此更新部分的答案版本
更新#2
抱歉,我没有意识到您正在加载页面片段(
#content-area) 使用
jQuery.load() 方法或者你没有使用
admin-ajax.php 处理AJAX请求。
因此,如果您不使用wp_ajax_{action} 或wp_ajax_nopriv_{action} 操作,或者使用执行AJAX请求的方式,可以检查X-Requested-With 标题已设置,其值为XMLHttpRequest, 如果是这样,您可以取消会话取消设置,如下所示:
function unset_filter_session() {
if ( empty( $_SERVER[\'HTTP_X_REQUESTED_WITH\'] ) ||
\'XMLHttpRequest\' !== $_SERVER[\'HTTP_X_REQUESTED_WITH\'] ) {
//Reset sessions on refresh page, if not doing AJAX request
unset( $_SESSION[\'expenditure_filter\'] );
}
}
这应该是可行的,因为jQuery总是设置该标头,除非您显式删除它—或更改其值。
请参见headers 上的选项jQuery.ajax() reference:
标题X-Requested-With: XMLHttpRequest 始终添加,但其默认值为XMLHttpRequest 值可以更改
Note: The header name is X-Requested-With, but in the superglobal $_SERVER, its key is HTTP_X_REQUESTED_WITH. I.e. Don\'t use $_SERVER[\'X-Requested-With\'].
function unset_filter_session() {
if ( \'XMLHttpRequest\' !== filter_input( INPUT_SERVER, \'HTTP_X_REQUESTED_WITH\' ) ) {
//Reset sessions on refresh page, if not doing AJAX request
unset( $_SESSION[\'expenditure_filter\'] );
}
}
(但我保留了之前的代码以供参考)