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関数が実装されていないため、この関数記述を削除してください。
jim912さん、ありがとうございます!
動作確認できました。
現状の静的ページを維持しつつ動的ページへ移行しなくてはならず、編集するユーザもスキルがまちまちです。
TOPページ用に専用のテンプレートを用意したりすれば、使われたくないのが管理者ですが、どこで間違ってもおかしくないスキルのユーザもいるので、たとえコアを修正してでも可能なら使えないようにしたかったのです。
現状「フックできるポイントがない」ということなので、コアの修正やむなしですが、今後このあたりのフックもできるようになるといいですね;)