Ekstra TinyMCE editörü <p> ve <br> etiketlerini çıkarır mı?


22

Hey millet, özel bir meta kutusunda görüntülenen bazı yazılara TinyMCE ekledim. Düzenleyicinin kaydetmeyeceği <p>veya <br/>etiketlemediği durumlar hariç, tüm biçimlendirme işlemleri mükemmel şekilde çalışır . Satır sonlarını korumaz.

TinyMCE şöyle kurulur:

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

Ve hepsi mükemmel çalışıyor. Tüm etiketleme düğmeleri <P>ve <BR>etiketleri dışında iyi çalışır .

Editörün yazı metaları kaydedilmeden önce mi yoksa sonra mı çıkarıldığından emin değilim.

Fikirler?


Bir şekilde çalışmasını sağladım. Çekirdekten fonksiyonu çoğaltma ve değiştirerek 'remove_linebreaks' => trueiçin 'remove_linebreaks' => false. Ancak 'remove_linebreaks' => falsefonksiyona iletilen ayarlar dizisinde belirtirsem işe yaramaz
Pippin

@Arthur Carabott evet, bu benim için de yaptı. Dokümanlara bir link ekleyelim: codex.wordpress.org/Function_Reference/wpautop Bye!
Luca Reghellin

Çok garip bir şey görüyoruz. Elle girilen / yapıştırılan mesajlarda düzenleme sonları korunur. İçe aktardığımız yayınlar, düzenleyicideki satır sonlarını kesen editöre tabidir.
JCL1178

Yanıtlar:


16

Son zamanlarda bu çalışma var. metanameMeta kutusu adınızı aramalı ve değiştirmelisiniz .

Biçimlendirmeyi korumanın anahtarı wpautop();verileri kaydederken kullanmaktı .

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_metaAyrıca edecek add_post_metaolursa meta_keyeklenecek yok.
vmassuchetto

5

TinyMCE'yi özel olarak yapılandırmak için kullandığımın (aşağılık bir sürümü):

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

Sanırım bu zaten denediğin şey mi?

DÜZENLE:

Bazı diğer yapılandırma değişikliklerini eklemeniz gerekebilir, örneğin:

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

TinyMCE yapılandırma parametreleriyle oynayın ve değiştirmeniz gerekenleri bulun.


Hayır, onu kullanmadım. Wp_tiny_mce'imi işlevinizle nasıl filtreleyebilirim?
Pippin

Kodu gir functions.php.
Chip Bennett,

Hmmm, çalışmıyor.
Pippin

Düzenlemeye bak. Doğru yapılandırma parametresini hedeflemiyor olabilirsiniz.
Chip Bennett

1
Çoktan bağlı olmalıydı tiny_mce_before_init. Başka bir işleve ya da nesneye vb. Sahip değilsin, değil mi?
Chip Bennett,

5

Wordpress'in sonraki sürümlerinde bu biraz değişmiş gibi görünüyor. Artık bu işlevi devre dışı bırakabilirsiniz:

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

3

Belki bunun için daha basit bir geçici çözüm buldu:

asıl şablonda bunu değiştirin:

<?php echo get_the_content());?>

buna:

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

Bu şekilde wpautop () , TinyMCE tarafından sıyrılan etiketleri bir şablona şablon temelinde ekler .


2

neden wp_editortırtıl işlemek için yeni wordpress işlevini kullanmıyorsunuz . Bu şekilde her şey halledilecek. Ve içeriği kullanıcıya gösterdiğinizde filtreyi uygulayınthe_content .

Bunun gibi:

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

Filtre the_content, bağlantı frenlerini otomatik olarak <br>ve konumuna dönüştürür <p>.


Bu soru gönderildiği sırada, wp_editor () işlevi mevcut değildi.
Pippin

1

Başka bir basit çözüm: Shortcode kullanın!

Bu kodu functions.php dosyasına yerleştirin ve içerik düzenleyicide [br] öğesini kullanın - HTML veya visual - br etiketinin görünmesini istediğiniz her yerde.

add_shortcode("br", "br_tag");

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

}

1

bu, wordpress için meta kutuları kullananlar içindir: Eklenti Adı: Meta Kutu Eklentisi URI: deluxeblogtips com / meta-box

/vendor/meta-box/inc/fields/wysiwyg.php statik işlevi değiştirdim:

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

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

- AMA DAHA İYİ ÇÖZÜM IS -

Bunu functions.php dosyasına koyun, filtreyi pluggin eklentisinden çağırır:

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

Artık eklentiyi güncelleyemezsiniz. İyi bir çözüm değil.
fuxia

Biraz daha yapıcı bir görüş var mı? :) Bu kodu functions.php dosyasına nereye koyabilirim?
claudio

Eklentiden daha save_postönce bağlanın ve değeri ayrı bir fonksiyonda hazırlayın.
fuxia
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.