我有一个插件,可以在前端隐藏某些帖子。为了保持一致,我需要将帖子也隐藏在搜索和AJAX搜索中(需要使用任何主题和搜索)。
为了使用AJAX搜索实现这一点,我使用了:
if ( wp_doing_ajax() ){
add_action( \'pre_get_posts\', array($this, \'plugin_function_set_visibility\') );
}
我唯一的问题是,这还隐藏了管理仪表板中的帖子,帖子无法再编辑。
is_admin() 在这种情况下不起作用,对于任何管理ajax请求,它都返回true
SO网友:Mike J
在测试了很多东西之后,我找到了这个功能,它可以工作:
function is_admin_request() {
/**
* Get current URL.
*
* @link https://wordpress.stackexchange.com/a/126534
*/
$current_url = home_url( add_query_arg( null, null ) );
/**
* Get admin URL and referrer.
*
* @link https://core.trac.wordpress.org/browser/tags/4.8/src/wp-includes/pluggable.php#L1076
*/
$admin_url = strtolower( admin_url() );
$referrer = strtolower( wp_get_referer() );
/**
* Check if this is a admin request. If true, it
* could also be a AJAX request from the frontend.
*/
if ( 0 === strpos( $current_url, $admin_url ) ) {
/**
* Check if the user comes from a admin page.
*/
if ( 0 === strpos( $referrer, $admin_url ) ) {
return true;
} else {
/**
* Check for AJAX requests.
*
* @link https://gist.github.com/zitrusblau/58124d4b2c56d06b070573a99f33b9ed#file-lazy-load-responsive-images-php-L193
*/
if ( function_exists( \'wp_doing_ajax\' ) ) {
return ! wp_doing_ajax();
} else {
return ! ( defined( \'DOING_AJAX\' ) && DOING_AJAX );
}
}
} else {
return false;
}
}