Production du XML depuis SPIP

Dans SPIP, un modèle (“squelette”) spécial est créé pour produire le code XML nécessaire à l’importation dans WordPress. Pour appliquer le squelette:

Les mots-clés

Le code pour exporter les mots-clés: export-mots.html

<BOUCLE_mots(MOTS){id_groupe=3}{par titre}>
<wp:tag>
  <wp:term_id>#ID_MOT</wp:term_id>
  <wp:tag_slug>#URL_MOT</wp:tag_slug>
  <wp:tag_name><![CDATA[#TITRE]]></wp:tag_name>
</wp:tag></BOUCLE_mots>

Articles

Le code pour exporter les articles:

export-articles.html

Le code inclut des boucles spéciales:

Une boucle pour obtenir le mot-clé “Artiste”:

<BOUCLE_artistes(MOTS){id_article}{id_groupe=3}>
  <category domain="post_tag" nicename="[(#URL_MOT)]"><![CDATA[[(#TITRE)]]]></category>
</BOUCLE_artistes>

Une boucle pour obtenir les documents liés (dans le groupe 3, donc des affiches). Complexité: le code sera différent selon le nombre d’affiches… Il faut produire un Array() PHP, et le sérialiser.

Il existe des techniques pour manipuler les Array avec la syntaxe SPIP, mais il est plus simple de le faire avec du PHP:

<B_docs>
<?php
$c12_affiches = array();
?>
<BOUCLE_docs(DOCUMENTS){id_article}>
<?php
	$c12_affiches[] = '[(#ID_DOCUMENT)]';
?>
</BOUCLE_docs>
	<wp:postmeta>
	  <wp:meta_key>c12_affiches</wp:meta_key>
	  <wp:meta_value><?php
	  echo serialize($c12_affiches); 
	  ?></wp:meta_value>
	</wp:postmeta>
</B_docs>

Documents

Voir le code : export-documents.html

Boucle principale DOCUMENTS:

Si on écrit la boucle ainsi…

<BOUCLE_docs(DOCUMENTS){0,1999}{par id_document}>

…seulement 620 documents sont retournés sur 689.

La raison: il y a 69 documents non publiés (ils ne sont attachés à aucun article).

On peut les inclure, en écrivant la boucle ainsi:

<BOUCLE_docs(DOCUMENTS){tout}{0,1999}{par id_document}>

Mais on a alors 1149 documents, y compris les thumbnails des PDFs (le mode vignette)! Pour les exclure, il faut ajouter: {mode != vignette}.

Le code final:

<BOUCLE_docs(DOCUMENTS){tout}{mode != vignette}{0,1999}{par id_document}>

Le code inclut des boucles spéciales pour des données supplémentaires:

Une boucle pour obtenir la taxonomie “Affiche par”:

<BOUCLE_mots(MOTS){id_document}>
  <category domain="affiches" nicename="#URL_MOT">[par (#TITRE)]</category>
</BOUCLE_mots>

Une boucle pour obtenir le concert lié au document:

<BOUCLE_article_lie(ARTICLES) {id_document}><wp:postmeta>
  <wp:meta_key>c12_spip_linked_article</wp:meta_key>
  <wp:meta_value>#ID_ARTICLE</wp:meta_value>
</wp:postmeta></BOUCLE_article_lie>

Suite: Test final et conclusion.