O editor extra do TinyMCE tira tags p e br?

22

Olá pessoal, adicionei um TinyMCE a algumas textareas que são exibidas em uma caixa meta personalizada. Toda a formatação funciona perfeitamente, exceto que o editor não salvará as tags <p> ou <br/> . Não preserva as quebras de linha.

O TinyMCE é configurado assim:

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 tudo funciona perfeitamente bem. Todos os botões de formatação funcionam bem, exceto pelas tags <P> e <BR> .

Não tenho a certeza se o editor está a eliminá-los antes ou depois da meta meta ser guardada.

Idéias?

    
por Pippin 22.04.2011 / 17:25
fonte

7 respostas

16

Recentemente, comecei a trabalhar. Você deve pesquisar e substituir metaname pelo nome da sua caixa meta.

A chave para manter a formatação era usar wpautop(); ao salvar os dados.

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));        
}
    
por Arthur Carabott 22.05.2011 / 23:07
fonte
5

Aqui está (uma versão reduzida) o que eu uso para configurar o 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');

Eu assumo que isto é o que você já tentou?

EDITAR:

Você pode precisar incluir algumas outras alterações de configuração, como:

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

Brinque com os parâmetros de configuração do TinyMCE e encontre aquele que você precisa alterar.

    
por Chip Bennett 26.04.2011 / 19:28
fonte
5

Isso parece ter mudado um pouco nas versões subseqüentes do Wordpress. Agora você pode desativar essa funcionalidade:

add_filter('tiny_mce_before_init', function($init) {
    $init['wpautop'] = false;
    return $init;
}
    
por Nathan Crause 04.10.2015 / 04:12
fonte
3

Encontrou talvez uma solução mais simples para isso:

no modelo real, altere isso:

<?php echo get_the_content());?>

para isso:

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

Desta forma, wpautop () adiciona as tags removidas pelo TinyMCE em uma base modelo por modelo.

    
por patricksayshi 08.03.2013 / 16:09
fonte
2

porque você não usa a nova função do wordpress wp_editor para renderizar o tinymce. Dessa forma, tudo será tratado. E quando você mostrar o conteúdo para o usuário, aplique o filtro the_content .

Assim:

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

O filtro the_content converterá automaticamente os freios do link para <br> e <p> .

    
por Sisir 21.01.2012 / 21:44
fonte
1

Outra solução simples: use códigos de acesso!

Coloque este código em functions.php e use [br] no editor de conteúdo - HTML ou visual - onde quer que você queira que uma tag br apareça.

add_shortcode("br", "br_tag");

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

}
    
por Tapefreak 30.08.2012 / 23:11
fonte
1

isto é para quem usa os metaboxes para wordpress: Nome do Plugin: Meta Box URI de plug-in: deluxeblogtips com / meta-box

eu modifiquei o /vendor/meta-box/inc/fields/wysiwyg.php na função estática:

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

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

- MAS A SOLUÇÃO MELHOR É -

Coloque isso em functions.php, ele chama o filtro do pluggin de metaboxes:

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
    
por claudio 06.11.2013 / 12:42
fonte