如何防止AJAX请求中的操作,当在管理员端?

时间:2020-09-01 作者:Mike J

我有一个插件,可以在前端隐藏某些帖子。为了保持一致,我需要将帖子也隐藏在搜索和AJAX搜索中(需要使用任何主题和搜索)。

为了使用AJAX搜索实现这一点,我使用了:

if ( wp_doing_ajax() ){
    add_action( \'pre_get_posts\', array($this, \'plugin_function_set_visibility\') );
}
我唯一的问题是,这还隐藏了管理仪表板中的帖子,帖子无法再编辑。

is_admin() 在这种情况下不起作用,对于任何管理ajax请求,它都返回true

1 个回复
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;
                        }
                    }

相关推荐

Gutenberg通过wp.hooks.addFilter修改核心分类面板元素

我已经研究过修改现有的编辑器元素……但几乎没有。但我确实在Github得到了一个很好的回复,指出了这一点:https://github.com/WordPress/gutenberg/tree/master/packages/editor/src/components/post-taxonomies#custom-taxonomy-selector显然,分类小组可以通过wp.hooks.addFilter. 这是一个很好的开始!我已经能够使用该代码片段模拟一些虚拟代码,用Dashicon替换分类法面板。(