追加のTinyMCEエディターは<p>および<br>タグを削除しますか?


22

皆さん、カスタムメタボックスに表示されるテキストエリアにTinyMCEを追加しました。エディターが保存<p><br/>タグ付けもしないことを除いて、すべてのフォーマットは完全に正常に機能します。改行は保持されません。

TinyMCEは次のようにセットアップされます。

wp_tiny_mce(true, array('editor_selector' => $field['class'] ) );

'<textarea name="', $field['id'], '" class="', $field['class'], '" id="', $field['id'], '" cols="60" rows="8" style="width:97%">', $meta ? esc_html($meta) : $field['std'], '</textarea>';

そして、それはすべて完璧に機能します。タグを除くすべての書式設定ボタンは正常に機能<P><BR>ます。

ポストメタが保存される前または後にエディターがそれらを削除するかどうかはわかりません。

アイデア?


私はそれをなんとかして機能させることができました。関数をコアから複製し、に変更'remove_linebreaks' => trueすることにより'remove_linebreaks' => false。私が指定した場合しかし、それは動作しません'remove_linebreaks' => false関数に渡された設定配列に
ピピン

@Arthur Carabottはい、それは私にとってもトリックでした。ドキュメントへのリンクを追加しましょう:codex.wordpress.org/Function_Reference/wpautop Bye!
ルカレゲリン

私たちは非常に奇妙なものを見ています。手書き入力/コピーペーストされた投稿は、編集時に保存されます。インポートした投稿は、編集時に改行を吹き飛ばすエディターの影響を受けます。
JCL1178

回答:


16

私は最近これを機能させました。検索しmetanameて、メタボックス名に置き換える必要があります。

フォーマットを維持するための鍵はwpautop();、データを保存するときに使用することでした。

add_action( 'add_meta_boxes', 'add_metaname_box');

add_action( 'save_post', 'metaname_save');

function add_metaname_box() {
    add_meta_box(
        'metaname_id',
        __( 'metaname text', 'metaname_textdomain'),
        'metaname_custom_box',
        'page'
    );
}

function metaname_custom_box() {
    global $post;
    wp_nonce_field( plugin_basename( __FILE__ ), 'metaname_noncename' );
    $data = get_post_meta($post->ID, 'metaname_custom_box', true);
    echo <<<EOT
    <script type="text/javascript">
jQuery(document).ready(function() {
    jQuery("#metaname_custom_box").addClass("mceEditor");
    if ( typeof( tinyMCE ) == "object" &&
         typeof( tinyMCE.execCommand ) == "function" ) {
        tinyMCE.execCommand("mceAddControl", false, "metaname_custom_box");
    }
});
</script>
    <textarea id="metaname_custom_box" name="metaname_custom_box">$data</textarea>
EOT;
}

function metaname_save($post_id) {
    global $post;

    // Verify
     if ( !wp_verify_nonce( $_POST['metaname_noncename'], plugin_basename(__FILE__) )) {
         return $post_id;
     }
     if ( 'page' == $_POST['post_type'] ) {
         if ( !current_user_can( 'edit_page', $post_id ))
             return $post_id;
     } else {
         if ( !current_user_can( 'edit_post', $post_id ))
             return $post_id;
     }

     $key = 'metaname_custom_box';
    $data = wpautop($_POST[$key]);

     // New, Update, and Delete
     if(get_post_meta($post_id, $key) == "") 
         add_post_meta($post_id, $key, $data, true);
     elseif($data != get_post_meta($post_id, $key, true))
         update_post_meta($post_id, $key, $data); 
     elseif($data == "")
         delete_post_meta($post_id, $key, get_post_meta($post_id, $key, true));        
}

update_post_meta挿入するが存在しないadd_post_meta場合も同様ですmeta_key
vmassuchetto

5

以下は、TinyMCEをカスタム構成するために使用するもの(簡略版)です。

// http://tinymce.moxiecode.com/wiki.php/Configuration
function cbnet_tinymce_config( $init ) {

    // Don't remove line breaks
    $init['remove_linebreaks'] = false; 

    // Pass $init back to WordPress
    return $init;
}
add_filter('tiny_mce_before_init', 'cbnet_tinymce_config');

私はこれがあなたがすでに試したことだと思いますか?

編集:

次のような他の設定変更を含める必要がある場合があります。

// Convert newline characters to BR tags
$init['convert_newlines_to_brs'] = true; 
// Do not remove redundant BR tags
$init['remove_redundant_brs'] = false;

TinyMCE構成パラメーターをいじって、変更する必要があるパラメーターを見つけます。


いいえ、私はそれを使いませんでした。あなたの関数でwp_tiny_mceをフィルタリングするにはどうすればよいですか?
ピピン

にコードをドロップしますfunctions.php
チップベネット

うーん、それは機能していません。
ピピン

編集をご覧ください。正しい構成パラメーターをターゲットにしていない可能性があります。
チップベネット

1
に既にフックされているはずtiny_mce_before_initです。別の関数やオブジェクトなどの中にありませんか?
チップベネット

5

これは、Wordpressの以降のバージョンで少し変更されたようです。これにより、この機能を無効にすることができます。

add_filter('tiny_mce_before_init', function($init) {
    $init['wpautop'] = false;
    return $init;
}

3

これに対するおそらくより簡単な回避策を見つけました:

実際のテンプレートで、これを変更します。

<?php echo get_the_content());?>

これに:

<?php echo wpautop(get_the_content());?>

このようにして、wpautop()、テンプレートごとにTinyMCEによって除去されたタグをテンプレートに追加します。


2

wordpressの新機能wp_editorを使用してtinymceをレンダリングしてみませんか。そうすれば、すべてが処理されます。そして、ユーザーにコンテンツを表示するときにフィルターを適用しますthe_content

このような:

$meta = "content of the metabox";
echo apply_filters('the_content', $meta);

フィルターthe_contentは自動的にリンクブレーキを<br>とに変換し<p>ます。


この質問が投稿された時点では、wp_editor()関数は使用できませんでした。
ピピン

1

別の簡単な解決策:ショートコードを使用してください!

このコードをfunctions.phpに配置し、コンテンツエディター(HTMLまたはビジュアル)で[br]を使用して、brタグを表示する場所を指定します。

add_shortcode("br", "br_tag");

function br_tag(){
    return("<br/>");                            

}

1

これは、ワードプレスのメタボックスを使用するユーザー向けです。プラグイン名:メタボックスプラグインURI:deluxeblogtips com / meta-box

私は静的関数で/vendor/meta-box/inc/fields/wysiwyg.phpを修正しました:

static function html( $html, $meta, $field )

//just after the else i have added :
$meta = html_entity_decode($meta); // 
//and solve the problem ;)

-しかし、より良いソリューションは-

これをfunctions.phpに入れて、メタボックスプラグインからフィルターを呼び出します。

function meta_wysiwyg_antes_save($meta)
{   
    $meta = html_entity_decode($meta);
    return $meta;
}
add_filter("rwmb_(ID-OF-METABOX-FIELD)_meta", "meta_wysiwyg_antes_save"); //en meta-box.php 194

これで、プラグインを更新できなくなりました。良い解決策ではありません。
FUXIA

少し建設的な意見がありますか?:) functions.phpのどこにこのコードを置くことができますか?
クラウディオ

save_postプラグインよりも前にフックし、別の関数で値を準備しますか?
FUXIA
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.