web-dev-qa-db-fra.com

TinyMCE editor - nouvelles lignes non rendues au début

J'ai travaillé avec un plugin en faisant divers réglages et en ajoutant des fonctionnalités supplémentaires.

Il utilise un type de publication personnalisé pour créer une page avec un téléchargement associé. Dans la zone d'administration qui vous permet de créer ces nouveaux téléchargements, il y a une boîte qui vous permet d'ajouter/éditer une description pour le téléchargement. Cela sert le contenu du corps pour la page rendue.

Cependant, la page d’administration ne comportait qu’un standard créé à l’aide du code suivant;

    public function display_sdm_description_meta_box($post) {  // Description metabox
_e('Add a description for this download item.', 'sdm_lang');
echo '<br /><br />';

$old_description = get_post_meta($post->ID, 'sdm_description', true);
?>
<textarea id="sdm_description" name="sdm_description" style="width:60%;height:100px;"><?php echo $old_description; ?></textarea>
<?php
wp_nonce_field('sdm_description_box_nonce', 'sdm_description_box_nonce_check');

}

J'avais besoin de cela pour donner la fonctionnalité typique de l'éditeur WP afin que l'utilisateur final puisse créer le contenu de la page/du corps de la même manière que sur une page normale ou une publication. En conséquence, on m'a donné le code suivant via une autre question que j'ai posée ici sur SO.

$old_description = get_post_meta($post->ID, 'sdm_description', true); 
$editor_id = 'sdm_description';
$settings = array( 'media_buttons' => false );

wp_editor ($ old_description, $ editor_id, $ settings);

Donc j'ai maintenant;

public function display_sdm_description_meta_box($post) {  // Description metabox
    _e('Add a description for this download item.', 'sdm_lang');
    echo '<br /><br />';

    $old_description = get_post_meta($post->ID, 'sdm_description', true);

    //adds TinyMCE capabilities
    $editor_id = 'sdm_description';
    $settings = array( 'media_buttons' => false );
    wp_editor( $old_description , $editor_id, $settings );

    ?>
    <!--<textarea id="sdm_description" name="sdm_description" style="width:60%;height:500px;"><?php echo $old_description; ?></textarea>-->
    <?php
    wp_nonce_field('sdm_description_box_nonce', 'sdm_description_box_nonce_check');
}

Cela rend l'éditeur tinyMCE dans la section admin. Cependant, si j'appuie sur Entrée pour ajouter une nouvelle ligne au contenu, cela ne sera rendu que par &nbsp; au début. Plusieurs 'entrées' donnent simplement plus d'espaces, mais jamais une nouvelle ligne ou l'équivalent de <br/>

Pourquoi le contenu n'est-il pas sorti comme prévu? Comment peut-il être corrigé?

Merci d'avance!

- - - INFORMATIONS SUPPLEMENTAIRES

Si je clique sur le bouton "Outils"> "Source" de l'éditeur TinyMCE, une fenêtre contextuelle s'affiche et indique le contenu que j'ai créé: <p>This is a test</p><p>Another line of testing!!!</p>

Cependant, sur le front-end [par exemple, le site Web], le code source est le suivant: `Ceci est un test

Une autre ligne de test !!!

Si je vais dans la base de données, je peux voir que les données sont stockées littéralement comme ceci:

This is a test

&nbsp;

&nbsp;

Another line of testing!!!
1
Phill Healey

Comme mentionné dans les commentaires, il s’agit d’un manque de wp_autop() et d’autres fonctions de formatage qui sont appliquées au filtre the_content. L'éditeur n'enregistre pas du tout les balises <p>, mais plus tard, les sauts de ligne sont convertis en paragraphes via wp_autop().

Pour le contenu méta, j'aime recréer les filtres par défaut. Je le fais parce que certains plugins ajoutent des éléments via le filtre the_content, une fois j’avais apply_filters('the_content', $your_meta_content); pour tous mes champs méta et se retrouvaient avec 20 ensembles de boutons de partage social.

/* 
 * Recreate the default filters on the_content
 * this will make it much easier to output the meta content with proper/expected formatting
*/
add_filter( 'meta_content', 'wptexturize'        );
add_filter( 'meta_content', 'convert_smilies'    );
add_filter( 'meta_content', 'convert_chars'      );
add_filter( 'meta_content', 'wpautop'            );
add_filter( 'meta_content', 'shortcode_unautop'  );
add_filter( 'meta_content', 'prepend_attachment' );
add_filter( 'meta_content', 'do_shortcode');

Ensuite, là où vous souhaitez réellement afficher vos nouvelles données, vous devez écrire ce qui suit:

$description = get_post_meta($post->ID, 'sdm_description', true);
echo apply_filters( 'meta_content', $description );
3
helgatheviking