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?

Pippin
sumber
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));        
}
Arthur Carabott
sumber
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.

Chip Bennett
sumber
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;
}
Nathan Crause
sumber
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.

patricksayshi
sumber
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>.

Sisir
sumber
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/>");                            

}
Tapefreak
sumber
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
claudio
sumber
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