3. 7 字下げ用全角スペースを保持(2)文頭

contentの初期設定・整形

 WordPress のエディター設定を変更することで、段落の出だしの字下げ、行頭の字下げが保持されますが、文頭の字下げは保持されません。JavaScript が原因と思われます。JavaScript では全角スペースも無効文字の一つです。
 エディターの初期値の設定で文頭の字下げを保持することができます。
 WordPress のエディター設定に関しては、“字下げ用全角スペース保持(1)”をご覧ください。

 初期値を設定するのに利用するフック'hk_func_editor_content'は、自作のフックです。“投稿作成のカスタマイズ(1)入力”に記載しています。
 ビジュアルモードの場合に、初期値を修正します。テキストモードの場合には、基本的には初期値を修正しません。
 文頭の字下げ用全角スペースの保持は、コンテンツが空の場合の初期値を次のようにすることで“基本的”には解決できます。
   <p>&nbsp;</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>&nbsp;</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>&nbsp;</p><table$1", $content );
        $content = preg_replace( '/<\/table><table( [^>]*>|>)/i', "</table><p>&nbsp;</p><table$1", $content );
        $content = preg_replace( '/<\/table>$/i', '</table><p>&nbsp;</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 );

 このプログラムをお使いになる場合は、お使いになる方の自己責任でお願いします。

関連

更新日:2016/03/23
掲載日:2015/11/15