クラシックエディターもしくはクラシックブロック限定の方法ではありますが、「WordPressの新規投稿時に、任意のHTMLを本文に初期値としてプリセットする」という機会があったので、備忘録としてメモしておきます。
function preset_default_content( $content, $post ) {
if ( $post->post_status === 'auto-draft' ) {
switch ( $post->post_type ) {
// 投稿
case 'post':
$content = '<div class="sample-1"><h2>ここに見出しが入ります</h2><p>ここにテキストが入ります。</p></div>';
break;
// 任意のカスタム投稿(例)
case 'custom-post-name':
$content = '<div class="sample-2"><h2>ここに見出しが入ります</h2><p>ここにテキストが入ります。</p></div>';
break;
}
}
return $content;
}
add_filter( 'default_content', 'preset_default_content', 10, 2 );
ブロックエディターなら「パターン(旧:再利用ブロック)」で済む話
事の発端を話すと、先様の要求はこんな感じ。
経緯と要望
- 雛形となる記事を作ったが、毎回それを複製して使う工程が面倒
- 新規投稿時、雛形が最初から本文にセットされていたらうれしいなぁ~(チラッ)
それならパターン(※旧:再利用ブロック)機能が使えますよ…で終わらせたかったのだが、中身を見たらクラシックエディター(Advanced Editor Tools ※旧:TinyMCE Advanced)でした。
雛形が決まっているならカスタムフィールドで全部作り直す手も考えたけど、そこまで話を大きくする程でも無いようです。
だったらcontentの初期値としてHTMLを丸ごとぶっ込んでおくかと思った次第。
function preset_default_content( $content, $post ) {
if ( $post->post_status === 'auto-draft' ) {
switch ( $post->post_type ) {
// 投稿
case 'post':
$content = '<div class="sample-1"><h2>ここに見出しが入ります</h2><p>ここにテキストが入ります。</p></div>';
break;
// 任意のカスタム投稿(例)
case 'custom-post-name':
$content = '<div class="sample-2"><h2>ここに見出しが入ります</h2><p>ここにテキストが入ります。</p></div>';
break;
}
}
return $content;
}
add_filter( 'default_content', 'preset_default_content', 10, 2 );
条件分岐で投稿タイプ毎にHTMLを指定する事も可能
この仕様で特に不都合は無いようでした。今後カスタム投稿が増えても、switch文の条件を追加するだけで済みます。
post_status === 'auto-draft'
という条件を付けたので「新規投稿」時のみに初期HTMLを挿入します。すでに公開・保存済みの投稿には影響を与えません。
ちなみに上記コードはクラシックエディター用ですが、これをそのままブロックエディターで開くと、一応クラシックブロックとして読み込んでくれます。
小技として参考になれば幸いです。