web-dev-qa-db-ja.com

特定のユーザーロールからAuthor.phpテンプレートを隠す

  1. 私はユーザープロファイル(カスタムロール:エージェントなど)をスタイルするauthor.phpテンプレートを持っています

  2. 私はブログを持っていて、編集者と寄稿者は記事を投稿することができます。

問題

ブログの閲覧者が作成者リンクをクリックして作成者アーカイブページを表示すると、ロードされるページはAuthor.phpテンプレートです。このテンプレートにはエージェントプロファイルの詳細が表示され、記事は表示されません。このauthor.phpテンプレートはEditors&Contributorsとは関係ありません。

解決策は?

どのように私はこのauthor.phpファイルをロードすることからEditor&Contributorを除外することができますか?そのようにしてユーザーがブログ投稿投稿者リンクを訪問すると、それはエージェントauthor.phpカスタムテンプレートに組み込まれた著者アーカイブページにそれらを連れて行きます

これが十分に明確であることを願って、助けてくれてありがとう!

1
Missiona

template_includeフックを使うとどのテンプレートファイルを使うかを変更できます。

その中で、あなたはそれが要求された著者ページであるかどうか条件付きでチェックすることができ、そして要求された著者を得るためにget_query_var()を使います。次に、作成者の役割を確認して、それが不要なものかどうかを確認し、必要であれば別のテンプレートを使用します。

以下はテストされていませんが、次のようなものです。

add_filter( 'template_include', 'myplugin_author_redirect', 99 );

function myplugin_author_redirect( $template ) {

    if ( is_author() ) { // When any Author page is being displayed

        // get the user page being requested
        $user = get_user_by('slug', get_query_var('author_name'));
        $user_role = array_shift($user->roles);

        // user roles we want to redirect away
        $exempt = array('editor', 'contributor');
        if ( in_array($user_role,$exempt,true) ) {
            // wtv file you want to load when an editors or contributor author page is requested
            return locate_template( array( 'archive.php' ) );
        }
    }
    return $template;
}
3
David Sword