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.