अतिरिक्त TinyMCE संपादक स्ट्रिप्स <p> और <br> टैग?


22

हे दोस्तों, मैंने कुछ textareas के लिए एक TinyMCE जोड़ा है जो एक कस्टम मेटा बॉक्स में प्रदर्शित होते हैं। सभी स्वरूपण पूरी तरह से ठीक काम करते हैं, सिवाय इसके कि संपादक को बचाने <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फ़ंक्शन में दिए गए सेटिंग ऐरे में निर्दिष्ट करता हूं
पिपिन

@ अराथुर काराबोट ने हां, यही मेरे लिए भी किया। डॉक्स के लिए एक लिंक जोड़ते हैं: codex.wordpress.org/Function_Reference/wpautop बाय!
लुका रीगलिन

हम एक बहुत ही अजीब चीज देख रहे हैं। पोस्ट जो हाथ से दर्ज / कॉपी-पेस्ट किए जाते हैं, वे संपादित पर संरक्षित होते हैं। हमारे द्वारा आयात किए जाने वाले पोस्ट एडिट पर लाइन ब्रेक को दूर करने वाले संपादक के अधीन हैं।
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_metaadd_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 को कैसे फ़िल्टर करूंगा?
पिप्पिन

में कोड ड्रॉप करें functions.php
चिप बैनेट

हम्म, यह काम नहीं कर रहा है।
पिप्पिन

मेरा संपादन देखें। आप सही कॉन्फ़िगरेशन पैरामीटर को लक्षित नहीं कर सकते हैं।
चिप बेनेट

1
यह पहले से ही आदी होना चाहिए, में tiny_mce_before_init। आपके पास यह किसी अन्य फ़ंक्शन, या ऑब्जेक्ट, आदि के अंदर नहीं है, क्या आप?
चिप बेनेट

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 () टेम्प्सी द्वारा छपे गए टैग को टेम्प्लेट के आधार पर टेम्पलेट में जोड़ देता है।


2

आप wp_editorटिनीम को रेंडर करने के लिए वर्डप्रेस नए फ़ंक्शन का उपयोग क्यों नहीं करते हैं । इस तरह सब कुछ संभालेगा। और जब आप उपयोगकर्ता को सामग्री दिखाते हैं तो फ़िल्टर लागू करते हैं the_content

ऐशे ही:

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

फिल्टर the_contentautmatically के लिए लिंक ब्रेक में परिवर्तित कर देंगे <br>और <p>


जिस समय यह प्रश्न पोस्ट किया गया था, तब wp_editor () फ़ंक्शन उपलब्ध नहीं था।
पिप्पिन

1

एक और सरल उपाय: शॉर्टकोड का उपयोग करें!

इस कोड को functions.php में रखें और कंटेंट एडिटर - HTML या विज़ुअल में [br] का उपयोग करें - जहाँ भी आप ब्र टैग को दिखाना चाहते हैं।

add_shortcode("br", "br_tag");

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

}

1

यह उन लोगों के लिए है जो वर्डप्रेस के लिए मेटाबॉक्सेस का उपयोग करते हैं: प्लगइन का नाम: मेटा बॉक्स प्लगइन यूआरआई: deluxeblogtips com / मेटा-बॉक्स

मैंने स्थिर फ़ंक्शन में /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 ;)

- बेहतर समाधान है -

इसे फंक्शन्स में डालिए। एफपी, यह मेटाबोक्स प्लगिन से फिल्टर को कॉल करता है:

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 पर कहां डाल सकता हूं?
क्लेडियो

save_postप्लगइन की तुलना में पहले हुक करें और एक अलग फ़ंक्शन में मान तैयार करें?
FUXIA
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.