例えば、新規ページの属性メタボックスの[親][テンプレート]のデフォルト値を任意に設定する(フォーラムネタ)なら、functions.php に以下を追加すれば OK。
function my_meta_box($page, $context, $post){
if('page' == $page && 'side' == $context && 0 == $post->ID){
if(0 == $post->post_parent && 'default' == $post->page_template){ // 無くてもOK
$post->post_parent = 3; // デフォルトにしたいページID
$post->page_template = 'page-home.php'; // デフォルトにしたいページテンプレートファイル名
}
}
}
add_action('do_meta_boxes', 'my_meta_box', 10, 3);
新規ページの画面が表示されるまでの流れを調べる(抜粋)
- wp-admin/page-new.php から開始。
- 24行目でデフォルト値を取得。この関数内でのフィルタはタイトル・本文・抜粋だけなので利用できず。
$post = get_default_page_to_edit();
- 26 行目 wp-admin/edit-page-form.php をインクルード。
- 78行目〜 メタボックスを追加。
対象のメタボックスは page_attributes_meta_box。でも今回はメタボックスが何かは気にしなくて OK。add_meta_box('submitdiv', __('Publish'), 'post_submit_meta_box', 'page', 'side', 'core'); add_meta_box('pageparentdiv', __('Attributes'), 'page_attributes_meta_box', 'page', 'side', 'core'); :
- 95行目〜 各コンテキスト(normal, advanced, side)のメタボックスについて do_meta_boxes アクションが呼ばれる。
do_action('do_meta_boxes', 'page', 'normal', $post); do_action('do_meta_boxes', 'page', 'advanced', $post); do_action('do_meta_boxes', 'page', 'side', $post);
- 102行目〜 HTML出力。
- 131行目 page_attributes_meta_box が属する side コンテキストのメタボックスを出力。
$side_meta_boxes = do_meta_boxes('page', 'side', $post); ?>
5.の do_meta_boxes はアクションですが、こちらはメタボックスの HTML を出力するファンクションです。名前は同じだけど別物なので混同しないように。
ということで、デフォルト値をいじれるのは do_action('do_meta_boxes', 'page', 'side', $post)
のタイミングと判明しました。
do_meta_boxes アクションでデフォルト値を設定する
PHP5から関数の引数がオブジェクトだと参照渡しになります。なので、do_meta_boxes アクションをフックした関数内で引数 $post を変更すれば、それがデフォルト値になります。
新規ページなのかどうかは 'page' == $page && 0 == $post->ID
で判断できます。最低限それだけ確認して、お好みのデフォルト値を設定すれば OK です。
タイトル・本文・抜粋のデフォルト値を変更する方法
これらは get_default_page_to_edit()
内で以下のようにフィルタが呼ばれてるのでそれを利用すると楽チンです。投稿・ページの両方に作用します。
$post->post_content = apply_filters( 'default_content', $post_content);
$post->post_title = apply_filters( 'default_title', $post_title );
$post->post_excerpt = apply_filters( 'default_excerpt', $post_excerpt);
例)忍者ブログでデフォルトのタイトルを「でござるの巻」にする場合。
function my_default_title($post_title){
return $post_title . 'でござるの巻';
}
add_filter( 'default_title', 'my_default_title')
参照:
フォーラム:ページの新規作成時、親とテンプレートを自動選択したい動作確認バージョン
- WordPress 2.9.1
- PHP 5.2.1
すごいよまさるさん。じゃなかったkzさん。
フォーラムの回答の奥にこんな解説まであるとわ。
勉強になります!_〆(゚▽゚*)
解決に至るまでのプロセスを知ることで
理解の助けとかWPistの技術レベルの向上に役立つといいなって感じです。
ステキだな俺、ウットリ。
こういうのは些細なことだけど、実案件では結構重要だったりする