web-dev-qa-db-ja.com

カスタム投稿タイプに特定のテンプレートを使用させるにはどうすればよいですか。

私はニュースレターのWebサイトを作成していますが、各ニュースレターのランディングページはフロントページと同じテンプレートを使用しています。各ニュースレターのランディングページにフロントページのテンプレートを使用するように強制する方法はありますか。

編集者は、ニュースレターを編集するときにページ属性ボックスでテンプレート名でテンプレートを選択できますが、これをより簡単にする方法があるのではないかと思います。

前もって感謝します。

1
petron

ニュースレターがカスタム投稿タイプの場合は、 テンプレート階層 を使用して専用のテンプレートを作成できます。

単一ページのテンプレートは..

single-{custom-post-type-name}.php

アーカイブページのテンプレートは..

archive-{custom-post-type-name}.php

これらのテンプレートは自動的に選択されるので、エディタのページテンプレート属性に追加する必要はありません。

2
Justin

以下の解決策はあなたの質問を正しく理解していればデフォルトのテンプレートをあなたが望むphpページのテンプレートに設定するでしょうが、あなたはファイルがあなたのテーマファイルにある名前を調べる必要があるでしょう。あなたはタイトルカスタム投稿タイプで述べますが、あなたの質問ではページを持っているので、私はページに基づいてこれをしました、そしてあなたがこれを投稿/カスタム投稿に変えることができるところをコメントしました。

この問題を解決するには、デフォルトのページテンプレートを定義してから、管理者以外のテンプレートの選択オプションを削除してそのセットを確認するようにします。

//  This hooks into the page template and over rides the default template use this to make sure your magazine template is always default
    add_filter( 'template_include', 'default_page_template', 99 );

    function default_page_template( $template ) {
// Change page to post if not a page your working on or custom post type name
        if ( is_singular( 'page' )  ) {
            // change the default-page-template.php to your template name
            $default_template = locate_template( array( 'default-page-template.php' ) );
            if ( '' != $default_template ) {
                return $default_template ;
            }
        }

        return $template;
    }


// removes the user page select meta-box for user roles that are not admins
add_action( 'admin_menu', 'restrict_access' );
function restrict_access() {
// if the user is not admin - you can add any user roles or multiple roles
if(!current_user_can('administrator')){
    // Not tested but think this is the correct code for page template meta-box
    remove_meta_box( 'pageparentdiv', 'page','normal' );
    }
}
2
Sam