仅在初始化钩子中检测前端页面

时间:2019-03-28 作者:Max Lutz

如果不是前端页面,我将尝试提前退出“init”挂钩中的函数。这就是我目前所拥有的,但它肯定是在wp json端点上运行的。是否有人有完整的“提前退出”条款来确保这只在前端页面上运行?

add_action(\'init\', \'test\'); 

function test() {

    if ( is_admin || wp_doing_ajax() ) {
        return; 
    }

    // Do stuff here
}

1 个回复
SO网友:Ian Dunn

我不建议检测它是否不是admin或REST API,因为使用这种方法,您还需要检测它是否不是a WP-Cron job, an AJAX request, 或the login screen.

我认为最好直接测试前端wp_using_themes(). 需要注意的是,您仍然需要确保它不是REST API请求,for reasons.

if ( wp_using_themes() && ! _tmp_is_rest_api_request() ) {
    wp_die( \'i will only run on the front end\' );
}

/**
 * Returns true if the current request is for the REST API.
 *
 * @todo: Replace this once Core provides a canonical way to do this: https://core.trac.wordpress.org/ticket/42061.
 *
 * @return bool
 */
function _tmp_is_rest_api_request() {
    if ( empty( $_SERVER[\'REQUEST_URI\'] ) ) {
        return false;
    }

    $rest_prefix = trailingslashit( rest_get_url_prefix() );

    return false !== strpos( $_SERVER[\'REQUEST_URI\'], $rest_prefix );
}

相关推荐