Editorul TinyMCE suplimentar elimină tag-urile <p> și <br>?

22 apr. 2011, 18:25:16
Vizualizări: 25.7K
Voturi: 23

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?

3
Comentarii

Am reușit să funcționeze într-un fel. Prin duplicarea funcției din nucleu și schimbarea 'remove_linebreaks' => true în 'remove_linebreaks' => false. Dar nu funcționează dacă specific 'remove_linebreaks' => false în array-ul de setări transmis funcției

Pippin Pippin
22 apr. 2011 22:29:18

Observăm un lucru foarte ciudat. Postările introduse manual/copiate păstrează liniile noi la editare. Postările pe care le-am importat sunt supuse la eliminarea liniilor noi de către editor la editare.

JCL1178 JCL1178
8 feb. 2012 00:31:04

@Arthur Carabott da, asta a funcționat și pentru mine. Hai să adăugăm un link către documentație: http://codex.wordpress.org/Function_Reference/wpautop Pa!

Luca Reghellin Luca Reghellin
18 nov. 2011 17:02:39
Toate răspunsurile la întrebare 7
1
16

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));        
}
23 mai 2011 00:07:00
Comentarii

update_post_meta va adăuga și add_post_meta dacă meta_key-ul care trebuie inserat nu există.

vmassuchetto vmassuchetto
9 dec. 2011 15:26:14
0

Aceasta funcționalitate pare să fi suferit modificări în versiunile ulterioare ale WordPress. Acum poți dezactiva această funcționalitate astfel:

add_filter('tiny_mce_before_init', function($init) {
    $init['wpautop'] = false;
    return $init;
}
4 oct. 2015 05:12:01
6

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.

26 apr. 2011 20:28:06
Comentarii

Nu, nu am folosit asta. Cum aș putea filtra wp_tiny_mce cu funcția ta?

Pippin Pippin
27 apr. 2011 07:06:07

Adaugă codul în functions.php.

Chip Bennett Chip Bennett
27 apr. 2011 16:07:17

Hmmm, nu funcționează.

Pippin Pippin
27 apr. 2011 17:04:53

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

Chip Bennett Chip Bennett
27 apr. 2011 17:20:16

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?

Pippin Pippin
27 apr. 2011 18:13:50

Ar trebui să fie deja conectat, în tiny_mce_before_init. Nu ai pus codul în interiorul unei alte funcții sau obiect, etc., nu-i așa?

Chip Bennett Chip Bennett
27 apr. 2011 18:19:30
Arată celelalte 1 comentarii
0

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.

8 mar. 2013 17:09:17
1

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

21 ian. 2012 22:44:40
Comentarii

În momentul în care această întrebare a fost postată, funcția wp_editor() nu era disponibilă.

Pippin Pippin
23 ian. 2012 06:17:24
0

O altă soluție simplă: Folosește Shortcodes!

Plasează acest cod în functions.php și folosește [br] în editorul de conținut - HTML sau vizual - oriunde dorești să apară un tag br.

add_shortcode("br", "br_tag");

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

}
31 aug. 2012 00:11:59
3

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
6 nov. 2013 13:42:43
Comentarii

Acum nu mai poți actualiza pluginul. Nu este o soluție bună.

fuxia fuxia
6 nov. 2013 14:26:32

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

ClaudioC ClaudioC
6 nov. 2013 19:15:06

Folosește hook-ul save_post mai devreme decât pluginul și pregătește valoarea într-o funcție separată?

fuxia fuxia
6 nov. 2013 19:33:58