WordPress のエディター設定を変更することで、段落の出だしの字下げ、行頭の字下げが保持されますが、文頭の字下げは保持されません。JavaScript が原因と思われます。JavaScript では全角スペースも無効文字の一つです。
エディターの初期値の設定で文頭の字下げを保持することができます。
WordPress のエディター設定に関しては、“字下げ用全角スペース保持(1)”をご覧ください。
初期値を設定するのに利用するフック'hk_func_editor_content'は、自作のフックです。“投稿作成のカスタマイズ(1)入力”に記載しています。
ビジュアルモードの場合に、初期値を修正します。テキストモードの場合には、基本的には初期値を修正しません。
文頭の字下げ用全角スペースの保持は、コンテンツが空の場合の初期値を次のようにすることで“基本的”には解決できます。
<p> </p>
WordPress オリジナル形式対応も念のためコードに含めています。pタグラップとショートコードのpタグラップ解除を行っています。
改行の削除の前後でpreタグ退避、復元を行っています。改行はビジュアルモードで半角スペースに変わります。このため削除します。script タグを投稿文中で使用する場合は script タグの退避、復元が必要です。
関数 hk_escape_pre と hk_restore_pre は、“共通関数”に記載します。
TABLE 前後に文章入力エリア挿入については、別途説明します。
コード
// 全ブロックタグ $hk_editor_allblocks = '(?:table|thead|tfoot|caption|col|colgroup|tbody|tr|td|th|div|dl|dd|dt|ul|ol|li|pre|form|map|area|blockquote|address|math|style|p|h[1-6]|hr|fieldset|legend|section|article|aside|hgroup|header|footer|nav|figure|figcaption|details|menu|summary)'; // -------------------------------- // content 初期設定・整形 // -------------------------------- function hk_editor_the_editor_content( $content, $default_editor ) { global $hk_editor_allblocks; // タブ削除 $content = preg_replace( '/\t/', '', $content ); // 文字を統一 $content = preg_replace( '/\x{00A0}/u', ' ', $content ); $content = preg_replace( '/\r\n|\r/', "\n", $content ); $content = trim( $content ); // ビジュアル if ( $default_editor == 'tinymce' ) { $content = trim( $content ); // 空の場合の初期値 if ( $content == '' ) return '<p> </p>'; // オリジナル形式対策 $pattern = '/<'.$hk_editor_allblocks.'( [^>]*>|>)/i'; if (( ! preg_match( $pattern, $content ) ) && ( strpos( $content, '<br ' ) === false ) && ( strpos( $content, "\n" ) !== false )) { $content = wpautop( $content ); $content = shortcode_unautop( $content ); } // TABLE 前後に文章入力エリア挿入 $content = preg_replace( '/^<table( [^>]*>|>)/i', "<p> </p><table$1", $content ); $content = preg_replace( '/<\/table><table( [^>]*>|>)/i', "</table><p> </p><table$1", $content ); $content = preg_replace( '/<\/table>$/i', '</table><p> </p>', $content ); // PREタグ退避 $pre_tags1 = array(); $pre_tags2 = array(); $line_break = false; // 改行がエディターで空白に置き換わるため $content = hk_escape_pre( $content, $pre_tags1, $pre_tags2, $line_break ); // 改行の削除 $content = preg_replace( '/\n/', '', $content ); // PREタグ復元 $content = hk_restore_pre( $content, $pre_tags1, $pre_tags2 ); } return $content; } add_filter( 'hk_func_editor_content', 'hk_editor_the_editor_content', 10, 2 );
このプログラムをお使いになる場合は、お使いになる方の自己責任でお願いします。