L'editor TinyMCE aggiuntivo rimuove le tag <p> e <br>?


22

Ehi ragazzi, ho aggiunto un TinyMCE ad alcune textareas che sono visualizzate in una meta box personalizzata. Tutta la formattazione funziona perfettamente, tranne che l'editor non salverà <p>o <br/>tag. Non preserva le interruzioni di riga.

TinyMCE è configurato in questo modo:

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

E tutto funziona perfettamente. Tutti i pulsanti di formattazione funzionano correttamente, ad eccezione dei tag <P>e <BR>.

Non sono sicuro che l'editor li stia eliminando prima o dopo il salvataggio della meta meta.

Idee?


Sono riuscito a farlo funzionare in un modo. Duplicando la funzione dal core e cambiando 'remove_linebreaks' => truein 'remove_linebreaks' => false. Ma non funziona se specifico 'remove_linebreaks' => falsenell'array delle impostazioni passato alla funzione
Pipino

@Arthur Carabott sì, anche per me ha funzionato. Aggiungiamo un link ai documenti: codex.wordpress.org/Function_Reference/wpautop Ciao!
Luca Reghellin,

Stiamo vedendo una cosa molto strana. I post inseriti / incollati a mano hanno le interruzioni conservate durante la modifica. I post che abbiamo importato sono soggetti all'editor che soffia via le interruzioni di riga durante la modifica.
JCL1178,

Risposte:


16

Recentemente ho avuto questo lavoro. Dovresti cercare e sostituire metanamecon il nome della tua meta box.

La chiave per mantenere la formattazione era usare wpautop();durante il salvataggio dei dati.

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_metasarà anche add_post_metase il meta_keyda inserire non esiste.
vmassuchetto,

5

Ecco (una versione ridotta di) quello che uso per configurare TinyMCE su misura:

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

Presumo che questo sia quello che hai già provato?

MODIFICARE:

Potrebbe essere necessario includere alcune altre modifiche alla configurazione, come:

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

Gioca con i parametri di configurazione di TinyMCE e trova quello che devi cambiare.


No, non l'ho usato. Come filtrerei il mio wp_tiny_mce con la tua funzione?
Pipino,

Rilascia il codice functions.php.
Chip Bennett,

Hmmm, non funziona.
Pipino,

Vedi la mia modifica. È possibile che non si stia prendendo di mira il parametro di configurazione corretto.
Chip Bennett,

1
Dovrebbe già essere agganciato, in tiny_mce_before_init. Non lo hai all'interno di un'altra funzione, o oggetto, ecc., Vero?
Chip Bennett,

5

Questo sembra essere leggermente cambiato nelle versioni successive di Wordpress. Ora puoi disabilitare questa funzionalità in questo modo:

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

3

Ho trovato forse una soluzione più semplice per questo:

sul modello reale, cambia questo:

<?php echo get_the_content());?>

a questa:

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

In questo modo wpautop () aggiunge i tag rimossi da TinyMCE su un modello per modello.


2

perché non usi la nuova funzione wp_editordi wordpress per rendere il suono. In questo modo tutto verrà gestito. E quando mostri il contenuto all'utente, applica il filtro the_content.

Come questo:

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

Il filtro the_contentconverte automaticamente i freni di collegamento in <br>e <p>.


Al momento della pubblicazione di questa domanda, la funzione wp_editor () non era disponibile.
Pipino,

1

Un'altra soluzione semplice: utilizzare gli shortcode!

Inserisci questo codice in Functions.php e usa [br] nell'editor dei contenuti - HTML o visual - dove vuoi che appaia un tag br.

add_shortcode("br", "br_tag");

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

}

1

questo è per chi usa i metabox per wordpress: Nome plug-in: Meta Box URI plug-in: deluxeblogtips com / meta-box

ho modificato il /vendor/meta-box/inc/fields/wysiwyg.php in funzione statica:

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

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

- MA LA MIGLIORE SOLUZIONE È -

Metti questo in Functions.php, chiama il filtro dal 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

Ora non puoi più aggiornare il plugin. Non è una buona soluzione.
fuxia

Hai qualche opinione un po 'più costruttiva? :) Dove posso inserire questo codice su Functions.php?
claudio

Collegare save_postprima del plug-in e preparare il valore in una funzione separata?
fuxia
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.