如何在页面加载时检查用户能力(通过unctions.php)?

时间:2016-01-18 作者:Eric

我需要限制没有特定功能的用户查看特定页面。我不能使用短代码或类似的东西,我只想在它们到达页面URL时重定向它们。

我想通过向函数中添加一些内容来实现这一点。php文件。。。我想代码应该是这样的。。。

// hook on_page_load() into wordpress page load
function on_page_load($current_page_ID) {
    if( $current_page_ID == 1234 && is_user_logged_in() &&
        current_user_can(\'do_something_special\')) {
           return;  // allow it to continue
    } else {
           // otherwise
           die();   // or redirect or whatever
    }
}
我不太清楚如何拦截每个页面的加载,以查看他们是否要转到posts页面。有人能帮忙吗?还是有更优雅的方式来实现这一点?谢谢

1 个回复
最合适的回答,由SO网友:cybmeta 整理而成

如果要重定向,可以使用以下事件template_redirect:

add_action( \'template_redirect\', \'my_page_template_redirect\' );
function my_page_template_redirect() {
    // You can skip is_user_logged_in() if checking the user capability
    if( is_page( 1234 ) && ! current_user_can( \'do_something_special\' ) ) {
        $redirect_to = \'http://example.com/redirection-page\';
        // Default code status for redirection using wp_redirect is 302
        // If you need a different status code check
        // https://codex.wordpress.org/Function_Reference/wp_redirect
        wp_redirect( esc_url_raw( $redirect_to ) );
        exit();
    }

}
您可以找到有关template_redirect in the Codex.

由于您的问题是关于“如何拦截每个页面加载”,我认为您应该开始阅读法典中的以下条目:

  1. Plugin API
  2. Action definitionactions reference
  3. Filter definitionfilters reference

    在这种情况下,当请求某个页面并且用户分配了一些能力时,关于重定向,template_redirect 可能是拦截请求的合适时机。根据此操作的文档:“如果您需要在完全了解所查询内容的情况下执行重定向,那么这是一个很好的挂钩”。

相关推荐

如何在同一菜单位置(MENU_POSITION=20-Below Pages)中排序多个自定义POST类型?

这些是我用来使用“menu\\u position”参数在“Master Artister Lookup”上方显示“Artists”的参数。但是,仍不能正确显示在菜单中 $args = [ \'label\' => __(\'Artists\', SMF_CORE_NAME), \'labels\' => [ \'name\'