แถบเครื่องมือแก้ไข TinyMCE เสริมแถบ <p> และแท็ก <br>


22

สวัสดีฉันได้เพิ่ม TinyMCE ลงใน textareas บางรายการที่แสดงในกล่องเมตาที่กำหนดเอง การจัดรูปแบบทั้งหมดทำงานได้อย่างสมบูรณ์แบบยกเว้นว่าตัวแก้ไขจะไม่บันทึก<p>หรือ<br/>แท็ก มันไม่รักษาเส้นแบ่ง

TinyMCE มีการติดตั้งดังนี้:

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

และนั่นก็ใช้ได้ดีอย่างสมบูรณ์ ปุ่มการจัดรูปแบบทั้งหมดทำงานได้ดียกเว้นสำหรับ<P>และ<BR>แท็ก

ฉันไม่แน่ใจว่าตัวแก้ไขกำลังลอกออกก่อนหรือหลังการบันทึกเมตาโพสต์

ไอเดีย?


ฉันจัดการเพื่อให้มันทำงานในทิศทางเดียว โดยการทำซ้ำฟังก์ชั่นจากแกนและการเปลี่ยนแปลงไป'remove_linebreaks' => true 'remove_linebreaks' => falseแต่จะไม่ทำงานหากฉันระบุ'remove_linebreaks' => falseในอาร์เรย์การตั้งค่าที่ส่งไปยังฟังก์ชัน
Pippin

@Arthur Carabott ใช่นั่นก็เป็นเคล็ดลับสำหรับฉันเช่นกัน มาเพิ่มลิงค์ไปที่ docs: codex.wordpress.org/Function_Reference/wpautop Bye!
Luca Reghellin

เราเห็นสิ่งที่แปลกมาก โพสต์ที่ป้อนด้วยมือ / คัดลอกวางมีตัวแบ่งที่เก็บรักษาไว้ในการแก้ไข โพสต์ที่เรานำเข้านั้นอยู่ภายใต้ตัวแก้ไขที่ทำให้เส้นแบ่งของการแก้ไขหมดไป
JCL1178

คำตอบ:


16

ฉันเพิ่งได้ทำงานนี้ คุณควรค้นหาและแทนที่metanameด้วยชื่อกล่องเมตาของคุณ

กุญแจสำคัญในการรักษารูปแบบคือการใช้wpautop();เมื่อบันทึกข้อมูล

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_metaจะยังadd_post_metaถ้าสิ่งmeta_keyที่จะแทรกไม่มีอยู่
vmassuchetto

5

นี่คือ (รุ่นที่ตัดลง) สิ่งที่ฉันใช้เพื่อกำหนดค่า 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');

ฉันคิดว่านี่เป็นสิ่งที่คุณได้ลองไปแล้ว?

แก้ไข:

คุณอาจต้องรวมการเปลี่ยนแปลงการกำหนดค่าอื่น ๆ เช่น:

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

เล่นกับพารามิเตอร์การกำหนดค่า TinyMCEและค้นหาสิ่งที่คุณต้องการเปลี่ยน


ไม่ฉันไม่ได้ใช้สิ่งนั้น ฉันจะกรอง wp_tiny_mce ของฉันด้วยฟังก์ชั่นของคุณได้อย่างไร?
Pippin

functions.phpวางรหัสใน
Chip Bennett

อืมมันไม่ทำงาน
Pippin

ดูการแก้ไขของฉัน คุณอาจไม่ได้กำหนดเป้าหมายพารามิเตอร์การกำหนดค่าที่ถูกต้อง
Chip Bennett

1
มันควรจะติดอยู่tiny_mce_before_initแล้ว คุณไม่มีมันในฟังก์ชั่นอื่นหรือวัตถุอื่น ๆ ใช่ไหม?
Chip Bennett

5

ดูเหมือนว่าจะมีการเปลี่ยนแปลงเล็กน้อยใน Wordpress รุ่นถัดไป ตอนนี้คุณสามารถปิดการใช้งานฟังก์ชั่นนี้ดังนั้น:

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

3

พบว่าอาจเป็นวิธีแก้ปัญหาที่ง่ายกว่านี้:

บนเทมเพลตจริงเปลี่ยนสิ่งนี้:

<?php echo get_the_content());?>

สำหรับสิ่งนี้:

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

วิธีนี้ wpautop () เพิ่มแท็กที่ดึงออกโดย TinyMCE บนแม่แบบตามแม่แบบ


2

ทำไมคุณไม่ลองใช้ฟังก์ชั่นใหม่ของ wordpress wp_editorเพื่อสร้างความแตกต่าง ด้วยวิธีนี้ทุกอย่างจะได้รับการจัดการ the_contentและเมื่อคุณแสดงเนื้อหาที่ผู้ใช้ใช้ตัวกรอง

อย่างนี้:

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

ตัวกรองthe_contentautmatically จะแปลงการเชื่อมโยงเบรกไปและ<br><p>


ในขณะที่โพสต์คำถามนี้ฟังก์ชั่น wp_editor () ไม่สามารถใช้ได้
ปิ๊ปปิ้

1

อีกวิธีง่ายๆ: ใช้รหัสย่อ!

วางรหัสนี้ใน function.php และใช้ [br] ในตัวแก้ไขเนื้อหา - HTML หรือภาพ - ไม่ว่าคุณต้องการให้แท็ก br ปรากฏที่ใดก็ตาม

add_shortcode("br", "br_tag");

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

}

1

นี่คือสำหรับผู้ที่ใช้ metaboxes สำหรับ wordpress: ชื่อปลั๊กอิน: Meta Box plugin URI: deluxeblogtips com / meta-box

ฉันมีการแก้ไข /vendor/meta-box/inc/fields/wysiwyg.php ในฟังก์ชั่นคงที่:

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

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

- แต่ทางออกที่ดีกว่าคือ -

ใส่สิ่งนี้ลงในฟังก์ชั่น PHP เรียกใช้ตัวกรองจากปลั๊กอิน 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

ตอนนี้คุณไม่สามารถอัปเดตปลั๊กอินอีกต่อไป ไม่ใช่ทางออกที่ดี
fuxia

มีความเห็นที่สร้างสรรค์มากกว่านี้บ้างไหม? :) ฉันจะใส่รหัสนี้ใน functions.php ได้ที่ไหน?
claudio

เชื่อมsave_postต่อกับปลั๊กอินก่อนหน้าและเตรียมค่าในฟังก์ชั่นแยกกันหรือไม่
fuxia
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.