【WordPress】カスタム投稿ごとにエディタの初期テンプレートを設定する方法

【WordPress】カスタム投稿ごとにエディタの初期テンプレートを設定する方法 WordPress

WordPressでは、投稿画面にあらかじめ入力済みのテンプレートを表示させることで、執筆時の手間を省いたり、フォーマットを統一したりすることが可能です。この記事では、特定のカスタム投稿タイプに対してのみ、投稿画面の本文エディタに初期コンテンツ(テンプレート)を自動挿入する方法を紹介します。

functions.phpにコードを追加する

以下のコードを、使用しているテーマまたは子テーマの functions.php に追加してください。対象の投稿タイプ(例:custom_post)にだけテンプレートを設定します。

// エディタに初期コンテンツを設定
function set_default_editor_content( $content, $post ) {
    // 対象の投稿タイプを確認
    if ( $post->post_type === 'custom_post' && $post->post_status === 'auto-draft' ) {
        // 初期テンプレートを設定
        $template = "<h2>見出し</h2>\n\n本文をここに記入してください。\n\n<ul>\n<li>ポイント1</li>\n<li>ポイント2</li>\n</ul>";
        return $template;
    }
    return $content;
}
add_filter( 'default_content', 'set_default_editor_content', 10, 2 );

テンプレートのカスタマイズ例

以下のようなHTML構造をテンプレートとして挿入することができます。

<h2>概要</h2>
ここに概要を入力します。

<h2>詳細</h2>
ここに詳細情報を入力します。

<h2>補足情報</h2>
リストや注意点などがあれば記載してください。

注意点

このテンプレートは「新規追加」時にしか反映されません。すでに保存された投稿には適用されないため、既存記事の編集には影響しません。また、投稿ステータスが auto-draft(=未保存)であることが条件です。

複数のカスタム投稿タイプに対応させる方法

1つの投稿タイプだけでなく、複数のカスタム投稿タイプに異なる初期テンプレートを設定したい場合は、投稿タイプごとにテンプレートを切り替える処理を追加することで対応できます。

以下のコードでは、custom_post1custom_post2 に対して、それぞれ異なるテンプレートを挿入する例を示しています。

<?php
function set_default_editor_content( $content, $post ) {
    // 投稿ステータスが auto-draft(新規投稿)の場合のみ処理
    if ( $post->post_status !== 'auto-draft' ) {
        return $content;
    }

    // 投稿タイプごとのテンプレート一覧
    $templates = array(
        'custom_post1' => "<h2>タイトル</h2>\n\nこの投稿タイプ1のテンプレートです。\n\n<ul>\n<li>項目A</li>\n<li>項目B</li>\n</ul>",
        'custom_post2' => "<h2>概要</h2>\n\n投稿タイプ2ではこちらを使います。\n\n<p>ここに本文を入力してください。</p>",
    );

    // 該当する投稿タイプがあればテンプレートを挿入
    if ( array_key_exists( $post->post_type, $templates ) ) {
        return $templates[ $post->post_type ];
    }

    return $content;
}
add_filter( 'default_content', 'set_default_editor_content', 10, 2 );
?>

この方法を使えば、複数の投稿タイプに柔軟に対応できます。今後カスタム投稿タイプが増えた場合でも、$templates 配列にテンプレートを追加するだけで簡単に対応可能です。

外部ファイルからテンプレートを読み込む方法

テンプレートの内容が長くなる場合や、頻繁に更新したい場合は、初期コンテンツを外部ファイルに分けて管理するのがおすすめです。コードをすっきり保てるだけでなく、非開発者でもテンプレート内容の修正がしやすくなります。

以下は、外部HTMLファイルを読み込んで投稿エディタに挿入するコード例です。

<?php
function set_default_editor_content( $content, $post ) {
    if ( $post->post_type === 'custom_post' && $post->post_status === 'auto-draft' ) {
        // テンプレートファイルのパス(テーマ内のtemplate-editor/custom_post.html)
        $file_path = get_theme_file_path( 'template-editor/custom_post.html' );

        if ( file_exists( $file_path ) ) {
            $content = file_get_contents( $file_path );
        }
    }
    return $content;
}
add_filter( 'default_content', 'set_default_editor_content', 10, 2 );
?>

このコードを有効にするには、テーマディレクトリ内に以下のようなテンプレートファイルを作成しておきます。

/your-theme/
├── functions.php
└── template-editor/
    └── custom_post.html

custom_post.html の中には、次のようなHTMLを記述できます。

<h2>概要</h2>
ここに概要を記入してください。

<h2>詳細</h2>
詳細情報を記載してください。

<h2>備考</h2>
注意事項や補足があればこちらに記載してください。

この方法を使えば、PHPコードの中身をシンプルに保ちつつ、テンプレート内容を柔軟に変更できるようになります。

まとめ

カスタム投稿タイプに応じて初期テンプレートを表示させることで、記事作成の効率化や統一感のあるコンテンツ制作が実現できます。運用のルールや投稿者のスキルレベルに応じて、テンプレートの内容を工夫するとより効果的です。