尝试使用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\'] );
}
}
(但我保留了之前的代码以供参考)