web-dev-qa-db-fra.com

Création de 20 000 articles ou pages à l’aide d’un fichier .csv?

Voici mon défi: j'ai un fichier .csv qui contient 20 000 lignes de données.

Chaque ligne contient 5 colonnes de données sur un individu particulier.

J'ai besoin que chaque ligne (chaque personne) soit remplie dans une page ou un post WordPress. En d’autres termes, j’ai donc besoin de convertir 20 000 lignes d’un fichier .csv en 20 000 articles ou pages (fichiers HTML).

Comment pourrais-je m'y prendre? Existe-t-il un plugin ou suggéreriez-vous qu'il s'agisse plutôt d'une commande mySQL?

Toute direction reçue avec gratitude!

Merci!

4
henry

Importer des publications à partir d'un fichier .csv avec WP-CLI

Si notre import.csv est tabulation délimité, avec deux colonnes:

Planet Mars     The red planet. 
Planet Earth    Our blue planet.

alors nous pouvons l’analyser avec l’aide de ce answer , où nous utiliserons plutôt IFS=$'\t' en tant que délimiteur de tabulation:

while IFS=$'\t', read col1 col2; \
do \
    echo "$col1|$col2";
done < import.csv

Notez que le nombre de colonnes correspond dans une grande mesure aux colonnes du fichier.

Utilisons maintenant WP-CLI pour créer des publications avec wp create post :

while IFS=$'\t', read col1 col2; \
do \
  wp post create \
    --post_title="$col1" \
    --post_content="$col2" \
    --post_author=1 \
    --post_type=post \
    --post_status=publish \
done < import.csv

Si nous avons des métadonnées supplémentaires, comme la distance moyenne du Soleil en unités astronomiques (au):

Planet Mars     The red planet.     1.52
Planet Earth    Our blue planet.    1.00

alors nous pouvons essayer:

while IFS=$'\t', read col1 col2 col3; \
do \
  wp post create \
    --post_title="$col1" \
    --post_content="$col2" \
    --post_author=1 \
    --post_type=post \
    --post_status=publish \
    | xargs -I % wp post meta add % distance_au "$col3"; done < import.csv

Ce serait pratique si wp post create supportait l'argument meta_input de wp_insert_post().

Nous aurions aussi pu écrire cela avec wp_insert_post() à partir d'un fichier php avec la wp eval-filecommande .

WP-CLI prend en charge l'importation d'utilisateurs à partir d'un fichier csv, mais je n'ai pas encore vu ce type de fonctionnalité de base pour les publications.

Nous pourrions plutôt écrire notre propre commande WP-CLI pour l'importation de publications csv.

Ensuite, il y a des plugins, comme WP Importation de CLI CSV , qui semble l'avoir déjà fait (je n'y suis pas lié et je ne l'ai pas utilisé).

Notez que WP-CLI peut importer wxr des fichiers si vous pouvez convertir votre fichier csv en un ou plusieurs fichiers wxr.

Notez également qu'actuellement (4.8) WordPress ne gère pas bien hiérarchique type de publication (également appelé pages) dans le backend de wp-admin. Toutes les publications de ce type sont chargées en même temps dans la liste déroulante de la sélection parente. Cela ne fonctionne pas bien et peut entraîner un délai d'attente de PHP lorsque vous travaillez dans le backend! Voir par exemple ici . So opte pour les types de publication non hiérarchiques (aka posts) dans vos importations volumineuses.

4
birgire