WordPress コンテンツエディタにプレースホルダを設定する

WordPressの管理画面、コンテンツを入力するところ(コンテンツエディタ?)に更新する人にわかりやすいよう、タイトル部分と同じようにプレースホルダーを設定できないかと言われ調べてみました。

こちらの記事が参考になりました:
WordPress 記事入力フォーム(ビジュアルエディタ) にプレースホルダをつける
https://nendeb.com/545

コンテンツエディタ部分は、テキストエディタとビジュアルエディタの2種類があるのでそれぞれ設定するようです。またビジュアルエディタはTiny MCEが使われているので、Tiny MCE用のプラグインで対応することになります。

Tiny MCEのプラグインをダウンロード
mohan/tinymce-placeholder
https://github.com/mohan/tinymce-placeholder

plugin.jsかplugin.min.jsをテーマディレクトリに設置します。
私はテーマディレクトリ内のjsフォルダに設置しました。

functions.phpに下記を記載します。

//ビジュアルエディタでplugin.jsを読み込む
function add_mce_content_placeholder( $plugin_array ){
    if( 'works' === get_post_type() ){
        $plugin_array[ 'placeholder' ] = get_template_directory_uri() . '/assets/js/plugin.js';
    }
    return $plugin_array;
}
add_filter( 'mce_external_plugins', 'add_mce_content_placeholder' );

2行目でカスタム投稿タイプで条件分岐しています。
カスタム投稿タイプ works でのみ表示されるような設定です
3行目でplugin.jsの場所を指定します。

同じくfunctions.phpにテキストエディタ用の設定も記載

function add_the_content_editor_placeholder( $the_content_editor_html ){
    if( 'works' === get_post_type() ){
        $placeholder = 'ここにプレースホルダーとして表示したいものを入力';
        $the_content_editor_html = preg_replace( '/<textarea/', "<textarea placeholder=\"{$placeholder}\"", $the_content_editor_html );
    }
    return $the_content_editor_html;
}
add_filter( 'the_editor', 'add_the_content_editor_placeholder' );

これで確認してみたところ、テキストエディタではちゃんと表示されているけれど、ビジュアルエディタでは表示されていません。

みたところプレースホルダ部分にはposition:absoluteで位置が設定されているのでplugin.js内のスタイルシートを以下のように編集しました。

plugin.jsの36行目あたり

var placeholder_attrs = editor.settings.placeholder_attrs || {style: {position: 'absolute', top:'5px', left:0, color: '#888', padding: '1%', width:'98%', overflow: 'hidden', 'white-space': 'pre-wrap'} };

とある部分を

var placeholder_attrs = editor.settings.placeholder_attrs || {style: {position: 'absolute', top:'80px', left:0, color: '#888', padding: '1%', width:'98%', overflow: 'hidden', 'white-space': 'pre-wrap'} };

topの位置を80pxに変更。

これでビジュアルエディタにも表示されるようになりました