0

J'ai été chargé d'importer une grande quantité de contenu d'une certaine base de données, qui appartient à un système CMS propriétaire, à une nouvelle installation de WordPress . Après avoir écrit un bon script PHP pour récupérer les entrées et les insérer en utilisant la fonction wp_insert_post(), je suis maintenant coincé avec un problème. Ce que je veux faire est de "filtrer" ma chaîne d'entrée, qui est le contenu de la source, pour correspondre au format utilisé nativement par WordPress lorsque le contenu est copié-collé à l'éditeur intégré. Par exemple, voici comment cela ressemblerait à ceci:Meilleur moyen de générer un balisage approprié pour l'insertion dans WordPress depuis PHP (importation d'un autre CMS)

<strong>UIR e OER</strong> 

&nbsp; 

Os verbos terminados em <strong>-uir</strong> e <strong>-oer</strong> terão as 2ª e 3ª pessoas do singular do presente do indicativo escritas com <strong>-i-</strong>: 

<strong> </strong> 

<strong>– tu possuis</strong> 

<strong>– ele possui</strong> 

<strong>– tu constróis</strong> 

... 

Maintenant, voici comment le contenu original est extrait de la base de données source:

<p>&nbsp;<b style="line-height: 150%; text-align: center;"><span style="font-size:13.5pt;line-height:150%; font-family:&quot;Arial&quot;,&quot;sans-serif&quot;;mso-fareast-font-family:&quot;Times New Roman&quot;; mso-fareast-language:PT-BR">UIR e OER</span></b></p> <p class="MsoNormal" style="mso-margin-bottom-alt:auto;line-height:150%"><span style="font-size:12.0pt;line-height:150%;font-family:&quot;Times New Roman&quot;,&quot;serif&quot;; mso-fareast-font-family:&quot;Times New Roman&quot;;mso-fareast-language:PT-BR">&nbsp;<o:p></o:p></span></p> <p class="MsoNormal" style="mso-margin-bottom-alt:auto;line-height:150%"><span style="font-size:12.0pt;line-height:150%;font-family:&quot;Arial&quot;,&quot;sans-serif&quot;; mso-fareast-font-family:&quot;Times New Roman&quot;;mso-fareast-language:PT-BR">Os verbos terminados em <b>-uir</b> e <b>-oer</b> ter&atilde;o as 2&ordf; e 3&ordf; pessoas do singular do presente do&nbsp;indicativo escritas com <b>-i-</b>:<b> <o:p></o:p></b></span></p> <p class="MsoNormal" style="mso-margin-bottom-alt:auto;line-height:150%"><b><span style="font-size:12.0pt;line-height:150%;font-family:&quot;Arial&quot;,&quot;sans-serif&quot;; mso-fareast-font-family:&quot;Times New Roman&quot;;mso-fareast-language:PT-BR">&nbsp;</span></b></p> <p class="MsoNormal" style="mso-margin-bottom-alt:auto;line-height:150%"><b><span style="font-size:12.0pt;line-height:150%;font-family:&quot;Arial&quot;,&quot;sans-serif&quot;; mso-fareast-font-family:&quot;Times New Roman&quot;;mso-fareast-language:PT-BR">- tu possuis<o:p></o:p></span></b></p> <p class="MsoNormal" style="mso-margin-bottom-alt:auto;line-height:150%"><b><span style="font-size:12.0pt;line-height:150%;font-family:&quot;Arial&quot;,&quot;sans-serif&quot;; mso-fareast-font-family:&quot;Times New Roman&quot;;mso-fareast-language:PT-BR">- ele possui<o:p></o:p></span></b></p> <p class="MsoNormal" style="mso-margin-bottom-alt:auto;line-height:150%"><b><span style="font-size:12.0pt;line-height:150%;font-family:&quot;Arial&quot;,&quot;sans-serif&quot;; mso-fareast-font-family:&quot;Times New Roman&quot;;mso-fareast-language:PT-BR">- tu constr&oacute;is<o:p></o:p></span></b></p> 

Au début, il semblait que wp_insert_post() traiterait automatiquement , et il fait un peu de traitement, mais ce n'est pas suffisant.

Voici comment le contenu est stocké par le script d'importation:

<p>&nbsp;<b style="line-height: 150%; text-align: center;"><span style="font-size:13.5pt;line-height:150%; 
font-family:&quot;Arial&quot;,&quot;sans-serif&quot;;mso-fareast-font-family:&quot;Times New Roman&quot;; 
mso-fareast-language:PT-BR">UIR e OER</span></b></p> 
<p class="MsoNormal" style="mso-margin-bottom-alt:auto;line-height:150%"><span style="font-size:12.0pt;line-height:150%;font-family:&quot;Times New Roman&quot;,&quot;serif&quot;; 
mso-fareast-font-family:&quot;Times New Roman&quot;;mso-fareast-language:PT-BR">&nbsp;<o:p></o:p></span></p> 
<p class="MsoNormal" style="mso-margin-bottom-alt:auto;line-height:150%"><span style="font-size:12.0pt;line-height:150%;font-family:&quot;Arial&quot;,&quot;sans-serif&quot;; 
mso-fareast-font-family:&quot;Times New Roman&quot;;mso-fareast-language:PT-BR">Os verbos terminados em <b>-uir</b> e <b>-oer</b> ter&atilde;o as 2&ordf; e 3&ordf; pessoas do singular do presente do&nbsp;indicativo escritas com <b>-i-</b>:<b> <o:p></o:p></b></span></p> 
<p class="MsoNormal" style="mso-margin-bottom-alt:auto;line-height:150%"><b><span style="font-size:12.0pt;line-height:150%;font-family:&quot;Arial&quot;,&quot;sans-serif&quot;; 
mso-fareast-font-family:&quot;Times New Roman&quot;;mso-fareast-language:PT-BR">&nbsp;</span></b></p> 
<p class="MsoNormal" style="mso-margin-bottom-alt:auto;line-height:150%"><b><span style="font-size:12.0pt;line-height:150%;font-family:&quot;Arial&quot;,&quot;sans-serif&quot;; 
mso-fareast-font-family:&quot;Times New Roman&quot;;mso-fareast-language:PT-BR">- tu possuis<o:p></o:p></span></b></p> 
<p class="MsoNormal" style="mso-margin-bottom-alt:auto;line-height:150%"><b><span style="font-size:12.0pt;line-height:150%;font-family:&quot;Arial&quot;,&quot;sans-serif&quot;; 
mso-fareast-font-family:&quot;Times New Roman&quot;;mso-fareast-language:PT-BR">- ele possui<o:p></o:p></span></b></p> 
<p class="MsoNormal" style="mso-margin-bottom-alt:auto;line-height:150%"><b><span style="font-size:12.0pt;line-height:150%;font-family:&quot;Arial&quot;,&quot;sans-serif&quot;; 
mso-fareast-font-family:&quot;Times New Roman&quot;;mso-fareast-language:PT-BR">- tu constr&oacute;is<o:p></o:p></span></b></p> 

Ma première idée était de mettre en œuvre une fonction moi-même, sur la base preg_replace() et html_entity_decode(), mais il semble moi qu'il y a une solution beaucoup plus élégante. Y a-t-il?

Edit: Pour mettre une autre manière, ne PHP - ou WordPress lui-même - fournir un moyen de traiter le contenu comme TinyMCE (ce qui est le WordPress éditeur intégré) fait? Naturellement, je ne peux pas compter sur TinyMCE lui-même parce que c'est un outil JavaScript.

Répondre

0

Dans mon récent projet, nous devions faire de même. Nous avons utilisé les approches suivantes:

  1. preg_replace pour les tâches les plus simples.
  2. DOMDocument. C'est un excellent outil PHP pour analyser le HTML.
  3. (non PHP) L'importation principale a été effectuée avec node. Avec un couple de réglages nécessaires, wp-cli node module est un excellent outil pour la manipulation des environnements WordPress. Ensuite, nous pourrions utiliser cheeriojs pour analyser et modifier le code HTML.