Editorul TinyMCE suplimentar elimină tag-urile <p> și <br>?
Salut, am adăugat TinyMCE la unele zone de text care sunt afișate într-o casetă meta personalizată. Toate formatările funcționează perfect, cu excepția faptului că editorul nu va salva tag-urile <p>
sau <br/>
. Nu păstrează întreruperile de linie.
TinyMCE este configurat astfel:
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>';
Și totul funcționează perfect. Toate butoanele de formatare funcționează bine, cu excepția tag-urilor <P>
și <BR>
.
Nu sunt sigur dacă editorul le elimină înainte sau după ce meta postarea este salvată.
Idei?

Am reușit recent să fac asta funcțional. Ar trebui să cauți și să înlocuiești metaname
cu numele cutiei tale meta.
Cheia pentru menținerea formatării a fost utilizarea wpautop();
la salvarea datelor.
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;
// Verificare
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]);
// Adăugare, Actualizare și Ștergere
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));
}

Iată (o versiune simplificată a) ceea ce folosesc pentru a configura personalizat TinyMCE:
// http://tinymce.moxiecode.com/wiki.php/Configuration
function cbnet_tinymce_config( $init ) {
// Nu elimina liniile goale
$init['remove_linebreaks'] = false;
// Returnează $init către WordPress
return $init;
}
add_filter('tiny_mce_before_init', 'cbnet_tinymce_config');
Presupun că asta ai încercat deja?
EDIT:
Poate fi necesar să incluzi și alte modificări de configurare, cum ar fi:
// Converteste caracterele de linie nouă în tag-uri BR
$init['convert_newlines_to_brs'] = true;
// Nu elimina tag-urile BR redundante
$init['remove_redundant_brs'] = false;
Experimentează cu parametrii de configurare TinyMCE și găsește-l pe cel pe care trebuie să-l modifici.

Vezi modificarea mea. S-ar putea să nu targetezi parametrul de configurare corect.

Hmm, încă nu merge. Din câte văd, filtrul nu are niciun efect. Acesta este pentru un plugin, așa că codul filtrului este plasat în fișierul principal al plugin-ului. Ar trebui să fie trecut printr-un hook init?

Am găsit poate o soluție mai simplă pentru aceasta:
pe șablonul actual, schimbă asta:
<?php echo get_the_content());?>
în asta:
<?php echo wpautop(get_the_content());?>
În acest fel wpautop() adaugă tag-urile eliminate de TinyMCE pe o bază de șablon cu șablon.

de ce nu folosești noua funcție WordPress wp_editor
pentru a afișa editorul TinyMCE. În acest fel totul va fi gestionat automat. Și când afișezi conținutul utilizatorului, aplică filtrul the_content
.
Ca în exemplul de mai jos:
$meta = "conținutul metabox-ului";
echo apply_filters('the_content', $meta);
Filtrul the_content
va converti automat întreruperile de linie în <br>
și <p>
.

Acest ghid este pentru cei care utilizează metabox-uri în WordPress: Plugin Name: Meta Box Plugin URI: deluxeblogtips com/meta-box
Am modificat fișierul /vendor/meta-box/inc/fields/wysiwyg.php în funcția statică:
static function html( $html, $meta, $field )
//imediat după else am adăugat:
$meta = html_entity_decode($meta); //
//și am rezolvat problema ;)
-- DAR SOLUȚIA MAI BUNĂ ESTE --
Adăugați acest cod în functions.php, apelează filtrul din plugin-ul metabox:
function meta_wysiwyg_antes_save($meta)
{
$meta = html_entity_decode($meta);
return $meta;
}
add_filter("rwmb_(ID-CÂMP-METABOX)_meta", "meta_wysiwyg_antes_save"); //în meta-box.php linia 194

Ai cumva o opinie puțin mai constructivă? :) Unde pot pune acest cod în functions.php?
