web-dev-qa-db-fra.com

wp_insert_post n'échappe pas correctement les commentaires HTML lorsqu'ils incluent des balises

Je travaille sur l'écriture d'un script pour importer des données d'un CMS personnalisé dans Wordpress. Dans ce cadre, je dois importer le contenu de la publication avec précision, sans rien modifier. Toutefois, certains articles contiennent des commentaires HTML contenant des balises, ce qui semble confondre Wordpress.

J'ai condensé mon script en un petit exemple représentatif:

<?php

$_SERVER['HTTP_Host'] = 'localhost';
require_once('/var/www/wordpress/wp-load.php');

$post = array(
  'post_content' => 'This is <!-- a comment -->',
  'post_status' => 'publish'
);

wp_insert_post($post);

Cela fonctionne bien et je comprends exactement ce à quoi vous vous attendez. Si je visualise la source de la publication dans mon navigateur, je reçois:

<div class="entry-content">
  <p>This is <!-- a comment --></p>
</div><!-- .entry-content -->

Mais si mon commentaire contient des balises (par exemple, remplacez le post_content par This is <!-- <p>a comment</p> -->), Wordpress échappe aux délimiteurs de commentaires et analyse les balises qu'il contient. Le commentaire devient visible et lorsque je visualise le code source, il se présente comme suit:

<div class="entry-content">
  <p>This is &lt;!&#8211;
    <p>a comment</p>
  <p> &#8211;&gt;</p>
</div><!-- .entry-content -->

Comment empêcher Wordpress de casser les délimiteurs de commentaire et d'analyser les balises qu'il contient? Pour mémoire, je suis sur Wordpress 3.3.1 dans Ubuntu 12.04.

EDIT: Juste essayé sur Wordpress 3.4; le problème persiste.

5
Jeffrey Payette

Le programme suivant:

<?php

$_SERVER['HTTP_Host'] = 'localhost';
require_once('wp-load.php');

$post = array(
  'post_title' => 'HTML Escape',
  'post_content' => 'This is <!-- a comment --><br/>This is <!-- <p>a comment</p> -->',
  'post_status' => 'publish'
);

$id = wp_insert_post($post);
$post = get_post($id);
var_export( esc_html( $post->post_content ) );
?>

Affiche les éléments suivants dans le navigateur:

'This is <!-- a comment --><br/>This is <!-- <p>a comment</p> -->'

Il semble donc que votre boucle puisse être celle qui modifie le contenu de la publication.

2