フォーラム

[解決済み] ユーザー権限毎にページ用テンプレートの使用可否を分けたい (3 件の投稿)

  1. shokun0803
    メンバー
    2 years前の投稿 #

    ページ用テンプレートを複数用意するとページの作成画面で選択できるようになりますが、これをユーザー権限で使用できない(表示しない)ようにしたいのですが方法はありますでしょうか。
    admin権限では全てのページ用テンプレートが使用できて、かつ、例えば編集権限では特定のページ用テンプレートのみが表示され、表示されているもののみが使用できるようにしたいのです。

    ユーザー権限で使用できるカテゴリを制限するような方法はあるようなのですが、ページテンプレートを制限するような方法が見つかりませんでした。良い方法があればご教授お願いします。

  2. jim912
    世話役
    2 years前の投稿 #

    shokun0803さん、こんにちは。

    残念ながら、ページテンプレートを取得する部分には、フックできるポイントがないため、実装するとなると、どうしても改変になってしまいます。

    改変でよければ、wp-admin/includes/theme.phpのget_page_templates関数に追記することで、ある程度実現できそうです。

    function get_page_templates() {
    	$themes = get_themes();
    	$theme = get_current_theme();
    	$templates = $themes[$theme]['Template Files'];
    	$page_templates = array ();
    
    	if ( is_array( $templates ) ) {
    		foreach ( $templates as $template ) {
    			$template_data = implode( '', file( WP_CONTENT_DIR.$template ));
    
    			/* customize start */
    
    			if ( preg_match( '/Required Level:[\s]*(10|[\d]{1,1})[\s]*$/mi', $template_data, $level ) ) {
    				global $userdata;
    				$level = _cleanup_header_comment($level[1]);
    				if ( ! is_user_logged_in() || $userdata->user_level < $level ) { continue; }
    			}
    
    			/* customize end */
    
    			$name = '';
    			if ( preg_match( '|Template Name:(.*)$|mi', $template_data, $name ) )
    				$name = _cleanup_header_comment($name[1]);
    
    			if ( !empty( $name ) ) {
    				$page_templates[trim( $name )] = basename( $template );
    			}
    		}
    	}
    
    	return $page_templates;
    }

    ※ xmlrpc利用の場合、うまく機能しないかもしれません。
    ※ ユーザーのレベル設定によるコントロールになっています。ちなみに管理者のデフォルトレベルは10、編集者は7
    ※ テンプレートにRequired Level: *と記述すればレベル制限がかかります。記述がないテンプレートは、全ユーザーに表示されます。
    ※ 上記関数はVer2.8のサンプルです。2.7以下の場合は、_cleanup_header_comment関数が実装されていないため、この関数記述を削除してください。

  3. shokun0803
    メンバー
    2 years前の投稿 #

    jim912さん、ありがとうございます!
    動作確認できました。

    現状の静的ページを維持しつつ動的ページへ移行しなくてはならず、編集するユーザもスキルがまちまちです。
    TOPページ用に専用のテンプレートを用意したりすれば、使われたくないのが管理者ですが、どこで間違ってもおかしくないスキルのユーザもいるので、たとえコアを修正してでも可能なら使えないようにしたかったのです。

    現状「フックできるポイントがない」ということなので、コアの修正やむなしですが、今後このあたりのフックもできるようになるといいですね;)

返信

ログイン しなければ投稿できません。

About this Topic