web-dev-qa-db-ja.com

TinyMCEエディタ - フロントエンドに新しい行がレンダリングされない

私はプラグインを使ってさまざまな調整を行い、機能を追加してきました。

関連するダウンロードを含むページを作成するためにカスタム投稿タイプを使用します。あなたがこれらの新しいダウンロードを作成することを可能にする管理領域には、あなたがダウンロードのための説明を追加/編集することを可能にするボックスがあります。これはレンダリングされたページの本文コンテンツとして機能します。

ただし、管理ページには次のコードで作成された標準しかありません。

    public function display_sdm_description_meta_box($post) {  // Description metabox
_e('Add a description for this download item.', 'sdm_lang');
echo '<br /><br />';

$old_description = get_post_meta($post->ID, 'sdm_description', true);
?>
<textarea id="sdm_description" name="sdm_description" style="width:60%;height:100px;"><?php echo $old_description; ?></textarea>
<?php
wp_nonce_field('sdm_description_box_nonce', 'sdm_description_box_nonce_check');

}

エンドユーザーが通常のページや投稿と同じようにページ/ボディコンテンツを作成できるように、典型的なWPエディタ機能を提供するためにこれが必要でした。その結果、私がここにSOに投稿した別の質問を通して以下のコードを与えられました。

$old_description = get_post_meta($post->ID, 'sdm_description', true); 
$editor_id = 'sdm_description';
$settings = array( 'media_buttons' => false );

wp_editor($ old_description、$ editor_id、$ settings);

だから私は今持っています。

public function display_sdm_description_meta_box($post) {  // Description metabox
    _e('Add a description for this download item.', 'sdm_lang');
    echo '<br /><br />';

    $old_description = get_post_meta($post->ID, 'sdm_description', true);

    //adds TinyMCE capabilities
    $editor_id = 'sdm_description';
    $settings = array( 'media_buttons' => false );
    wp_editor( $old_description , $editor_id, $settings );

    ?>
    <!--<textarea id="sdm_description" name="sdm_description" style="width:60%;height:500px;"><?php echo $old_description; ?></textarea>-->
    <?php
    wp_nonce_field('sdm_description_box_nonce', 'sdm_description_box_nonce_check');
}

これにより、管理セクションにtinyMCEエディタが表示されます。しかし、Enterキーを押してコンテンツに新しい行を追加すると、フロントエンドでは&nbsp;としてレンダリングされるだけです。複数の 'enter'は単により多くのスペースをもたらしますが、改行や<br/>と同等のものは決してありません。

コンテンツが期待どおりに出力されないのはなぜですか。どうすれば修正できますか?

前もって感謝します!

- - - 追加情報

TinyMCEエディタの[ツール]> [ソース]ボタンをクリックすると、作成したコンテンツがポップアップウィンドウに表示されます。<p>This is a test</p><p>Another line of testing!!!</p>

ただし、フロントエンド(Webサイトなど)では、ソースコードは次のようになります。 `これはテストです。

テストのもう一つの行!!! `

DBにアクセスすると、データは文字通り次のように格納されていることがわかります。

This is a test

&nbsp;

&nbsp;

Another line of testing!!!
1
Phill Healey

コメントで述べたように、これはwp_autop()the_contentフィルターに適用される他のフォーマット関数の欠如です。エディタは<p>タグをまったく保存しませんが、その後の改行はwp_autop()を介して段落に変換されます。

メタコンテンツの場合は、デフォルトのフィルタを再作成します。私がこれを行うのは、すべてのメタフィールドにapply_filters('the_content', $your_meta_content);を付けて、20セットのソーシャル共有ボタンを使用するようになったときに、いくつかのプラグインがthe_contentフィルターを介してものを追加するからです。

/* 
 * Recreate the default filters on the_content
 * this will make it much easier to output the meta content with proper/expected formatting
*/
add_filter( 'meta_content', 'wptexturize'        );
add_filter( 'meta_content', 'convert_smilies'    );
add_filter( 'meta_content', 'convert_chars'      );
add_filter( 'meta_content', 'wpautop'            );
add_filter( 'meta_content', 'shortcode_unautop'  );
add_filter( 'meta_content', 'prepend_attachment' );
add_filter( 'meta_content', 'do_shortcode');

それからあなたが実際にあなたの新しいデータを表示したいところで、あなたは以下を書くべきです:

$description = get_post_meta($post->ID, 'sdm_description', true);
echo apply_filters( 'meta_content', $description );
3
helgatheviking