Editor ekstra TinyMCE menghapus <p> dan <br> tag?


22

Hai teman-teman, saya telah menambahkan TinyMCE ke beberapa textareas yang ditampilkan dalam kotak meta khusus. Semua pemformatan berfungsi dengan baik, kecuali bahwa editor tidak akan menyimpan <p>atau memberi <br/>tag. Itu tidak mempertahankan jeda baris.

TinyMCE diatur seperti ini:

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>';

Dan itu semua bekerja dengan baik. Semua tombol format berfungsi dengan baik, kecuali untuk <P>dan <BR>tag.

Saya tidak yakin apakah editor menghapusnya sebelum atau setelah meta pos disimpan.

Ide ide?


Saya berhasil membuatnya bekerja dengan satu cara. Dengan menduplikasi fungsi dari inti, dan berubah 'remove_linebreaks' => truemenjadi 'remove_linebreaks' => false. Tapi itu tidak berfungsi jika saya menentukan 'remove_linebreaks' => falsedalam pengaturan array yang dilewatkan ke fungsi
— Pippin

@Arthur Carabott ya, itu juga membantu saya. Mari menambahkan tautan ke dokumen: codex.wordpress.org/Function_Reference/wpautop Bye!
— Luca Reghellin

Kami melihat hal yang sangat aneh. Posting yang dimasukkan dengan tangan / disalin ditempelkan dengan jeda saat diedit. Kiriman yang kami impor tunduk pada editor yang menghilangkan jeda baris saat pengeditan.
— JCL1178

Jawaban:


16

Saya baru-baru ini berhasil. Anda harus mencari dan mengganti metanamedengan nama kotak meta Anda.

Kunci untuk mempertahankan pemformatan digunakan wpautop();saat menyimpan data.

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_metaakan juga add_post_metajika yang meta_keyakan dimasukkan tidak ada.
— vmassuchetto

5

Inilah (versi singkat dari) yang saya gunakan untuk mengonfigurasi 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');

Saya menganggap ini yang sudah Anda coba?

EDIT:

Anda mungkin perlu memasukkan beberapa perubahan konfigurasi lainnya, seperti:

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

Bermain-main dengan parameter konfigurasi TinyMCE , dan temukan yang perlu Anda ubah.


Tidak, saya tidak menggunakannya. Bagaimana saya memfilter wp_tiny_mce saya dengan fungsi Anda?
— Pippin

Masukkan kode functions.php.
— Chip Bennett

Hmmm, itu tidak berhasil.
— Pippin

Lihat hasil edit saya. Anda mungkin tidak menargetkan parameter konfigurasi yang benar.
— Chip Bennett

1
Seharusnya sudah ketagihan, ke tiny_mce_before_init. Anda tidak memilikinya di dalam fungsi lain, atau objek, dll, bukan?
— Chip Bennett

5

Ini tampaknya telah berubah sedikit dalam versi Wordpress berikutnya. Anda sekarang dapat menonaktifkan fungsi ini dengan demikian:

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

3

Mungkin menemukan solusi yang lebih sederhana untuk ini:

pada templat aktual, ubah ini:

<?php echo get_the_content());?>

untuk ini:

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

Dengan cara ini wpautop () menambahkan tag yang dihapus oleh TinyMCE berdasarkan templat per templat.


2

mengapa tidak Anda menggunakan fungsi baru wordpress wp_editoruntuk membuat konten. Dengan begitu semuanya akan ditangani. Dan ketika Anda menunjukkan konten kepada pengguna, menerapkan filter the_content.

Seperti ini:

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

Filter the_contentakan secara otomatis mengkonversi rem tautan ke <br>dan <p>.


Pada saat pertanyaan ini diposting, fungsi wp_editor () tidak tersedia.
— Pippin

1

Solusi sederhana lain: Gunakan Shortcode!

Tempatkan kode ini ke functions.php dan gunakan [br] di editor konten - HTML atau visual - di mana pun Anda ingin tag br muncul.

add_shortcode("br", "br_tag");

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

}

1

ini untuk yang menggunakan metabox untuk wordpress: Nama Plugin: Meta Box Plugin URI: deluxeblogtips com / meta-box

saya telah memodifikasi /vendor/meta-box/inc/fields/wysiwyg.php dalam fungsi statis:

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

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

- TETAPI SOLUSI LEBIH BAIK -

Masukkan ini ke dalam functions.php, ini memanggil filter dari metaboxes pluggin:

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

Sekarang Anda tidak dapat memperbarui plugin lagi. Bukan solusi yang bagus.
— fuxia

Apakah ada pendapat yang lebih konstruktif? :) Di mana saya bisa meletakkan kode ini di functions.php?
— claudio

Hubungkan save_postlebih awal dari plugin dan siapkan nilainya dalam fungsi terpisah?
— fuxia
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.