Zusätzliche TinyMCE-Editorstreifen <p> und <br> -Tags?


22

Hallo Leute, ich habe ein TinyMCE zu einigen Textbereichen hinzugefügt, die in einer benutzerdefinierten Meta-Box angezeigt werden. Die gesamte Formatierung funktioniert einwandfrei, mit der Ausnahme, dass der Editor keine Daten <p>oder <br/>Tags speichert . Die Zeilenumbrüche bleiben nicht erhalten.

Der TinyMCE ist folgendermaßen eingerichtet:

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

Und das alles funktioniert einwandfrei. Alle Formatierungsschaltflächen außer den Tags <P>und funktionieren <BR>einwandfrei.

Ich bin nicht sicher, ob der Editor sie entfernt, bevor oder nachdem das Post-Meta gespeichert wurde.

Ideen?


Ich habe es geschafft, es auf eine Art zum Laufen zu bringen. Durch Duplizieren der Funktion vom Kern und Wechseln 'remove_linebreaks' => truezu 'remove_linebreaks' => false. Aber es funktioniert nicht, wenn ich 'remove_linebreaks' => falsein den Einstellungen ein Array an die Funktion übergeben
— Pippin

@Arthur Carabott Ja, das hat den Trick auch für mich getan. Fügen wir einen Link zu den Dokumenten hinzu: codex.wordpress.org/Function_Reference/wpautop Bye!
— Luca Reghellin

Wir sehen eine sehr seltsame Sache. Bei manuell eingegebenen / kopierten Posts bleiben die Pausen beim Bearbeiten erhalten. Von uns importierte Posts unterliegen dem Editor, der beim Bearbeiten die Zeilenumbrüche wegbläst.
— JCL1178,

Antworten:


16

Ich habe das kürzlich zum Laufen gebracht. Sie sollten metanamemit Ihrem Meta-Box-Namen suchen und ersetzen .

Der Schlüssel zur Aufrechterhaltung der Formatierung war das wpautop();Speichern der Daten.

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_metawird auch, add_post_metawenn der meta_keyeinzufügende nicht existiert.
— Vmassuchetto

5

Hier ist (eine abgespeckte Version von), was ich verwende, um TinyMCE individuell zu konfigurieren:

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

Ich nehme an, das hast du schon versucht?

BEARBEITEN:

Möglicherweise müssen Sie einige andere Konfigurationsänderungen vornehmen, z.

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

Spielen Sie mit den TinyMCE-Konfigurationsparametern und finden Sie die, die Sie ändern müssen.


Nein, das habe ich nicht benutzt. Wie würde ich mein wp_tiny_mce mit Ihrer Funktion filtern?
— Pippin

Gib den Code ein functions.php.
— Chip Bennett

Hmmm, das funktioniert nicht.
— Pippin

Siehe meine Bearbeitung. Möglicherweise zielen Sie nicht auf den richtigen Konfigurationsparameter.
— Chip Bennett

1
Es sollte schon süchtig werden, in tiny_mce_before_init. Sie haben es nicht in einer anderen Funktion oder einem anderen Objekt usw., oder?
— Chip Bennett

5

Dies scheint sich in späteren Versionen von Wordpress ein wenig geändert zu haben. Sie können diese Funktionalität nun folgendermaßen deaktivieren:

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

3

Fand vielleicht eine einfachere Lösung dafür:

Ändern Sie auf der tatsächlichen Vorlage Folgendes:

<?php echo get_the_content());?>

dazu:

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

Auf diese Weise fügt wpautop () die von TinyMCE entfernten Tags auf Vorlagenbasis hinzu.


2

Warum benutzt du nicht die neue WordPress-Funktion wp_editor, um den Tinymce zu rendern? Auf diese Weise wird alles erledigt. Und wenn Sie dem Benutzer den Inhalt zeigen, wenden Sie den Filter an the_content.

So was:

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

Der Filter the_contentwandelt die Verbindungsbremsen automatisch in <br>und um <p>.


Zum Zeitpunkt der Veröffentlichung dieser Frage war die Funktion wp_editor () nicht verfügbar.
— Pippin

1

Eine andere einfache Lösung: Verwenden Sie Shortcodes!

Fügen Sie diesen Code in die Datei functions.php ein und verwenden Sie [br] im Inhaltseditor (HTML oder Visual), wo immer ein br-Tag angezeigt werden soll.

add_shortcode("br", "br_tag");

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

}

1

Dies ist für diejenigen, die die Metaboxen für WordPress verwenden: Plugin-Name: Meta-Box Plugin-URI: deluxeblogtips com / meta-box

Ich habe die Datei /vendor/meta-box/inc/fields/wysiwyg.php in der statischen Funktion geändert:

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

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

- ABER DIE BESSERE LÖSUNG IST -

Gib das in die Datei functions.php ein, sie ruft den Filter aus der Metabox Pluggin auf:

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

Jetzt können Sie das Plugin nicht mehr aktualisieren. Keine gute Lösung.
— fuxia

Haben einige eine etwas konstruktivere Meinung? :) Wo kann ich diesen Code auf functions.php setzen?
— Claudio

Haken Sie in save_postfrüher als das Plugin und bereitet den Wert in einer separaten Funktion?
— fuxia
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.