我可以排除特定角色的某些页面模板吗?

时间:2014-12-10 作者:Paul

假设我在制作页面时有两种类型的模板可用。“默认模板”和“中间模板”。

我有一个名为“编辑器”的角色,我不希望编辑器访问“中间模板”。

这可能(用钩子)吗?

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

如果需要更改使用的模板,可以使用template_include 过滤器(使用模板文件的正确文件名更改“itermediate template.php”和“page.php”):

add_filter( \'template_include\', \'cyb_exclude_template_for_editors\', 99 );
function cyb_exclude_template_for_editors( $template ) {

    $user = wp_get_current_user();
    if( in_array( "editor", (array) $user->roles ) && is_page_template( "itermediate-template.php" ) ) {
        $new_template = locate_template( array( \'page.php\' ) );
        if ( \'\' != $new_template ) {
            return $new_template ;
        }
    }

    return $template;
}
如果需要将用户重定向到其他页面,可以使用template_redirect 过滤器:

add_action( \'template_redirect\', \'cyb_redirect_editors_from_page_template\' );
function cyb_redirect_editors_from_page_template() {

    $user = wp_get_current_user();
    if( in_array( "editor", (array) $user->roles ) && is_page_template( "itermediate-template.php" ) ) {
        //Redirect to home, change to fit your needs
        wp_redirect( home_url() );
        exit();
    }

}

结束

相关推荐

Multiple single templates?

假设我有一个名为“事件”的自定义帖子类型,它有几个用于图像、文档等的自定义元框。。是否可能有两个不同的单一模板?例如:我有一个列出所有事件的页面,如果我单击一个事件,单一视图将显示我在event single中输入的所有元信息。php模板。现在,我想有一个不同的页面,再次列出所有事件,但如果我单击查看单个事件,则会使用不同的模板,以便显示与事件相关的其他元数据。或更好:page-events.php lists all events -> click on event -> shows sin