web-dev-qa-db-fra.com

Comment éditer en masse des URLs canoniques en SQL?

On m'a assigné pour éditer les URL canoniques (rel = "canonique" trouvées dans la tête) d'environ 600 publications sur le site d'un client. Tous les messages n'utiliseront pas la même URL canonique. Ni sont ces 301 ou 302. On me dit de ne pas utiliser de plug-in, car je devrais éditer chaque article un à la fois. Voici les étapes générales que je prévois de suivre:

  1. Faites une sauvegarde appropriée de la base de données mySQL dans phpMyAdmin.
  2. Téléchargez un CSV de la table contenant l'URL canonique (en utilisant l'exportation phpMyAdmin).
  3. Créez un nouveau csv qui utilise l'identifiant de publication et les nouvelles URL canoniques (et un peu plus de magie).
  4. Importez le nouveau fichier csv (dans son format corrigé avec LibreOffice) via un plugin appelé Really Simple CSV, qui enregistrera la nouvelle URL dans la base de données.

Ceci est le tutoriel que je suis pour ces étapes .

Mes questions sont les suivantes: en utilisant phpMyAdmin, quelle table est utilisée pour stocker ces URL, et comment s'appelle-t-elle exactement? Et, est-ce que quelqu'un a déjà fait ce genre de montage?

Le site est actuellement sur WordPress 3.9.x (la mise à jour de leur site dans une version plus récente ne relève pas de notre travail.)

Aidez-moi, s'il vous plaît!

2
jtorres

Descendre et téléverser des fichiers CSV est une opération difficile qui vous oblige à effectuer manuellement une série d'étapes sujettes aux erreurs humaines (et aux fautes de frappe). Ma suggestion serait de faire quelque chose que vous pouvez battre localement dans une copie locale de votre base de données. Étapes à suivre:

  1. Créez un base de données à l'aide de l'outil mysqldump et utilisez scp pour le copier localement }
  2. Tirer vers le haut une installation WP locale
  3. Installez WP CLI _, l'exécutant de ligne de commande WP, localement
  4. Exécutez wp post update avec les commandes nécessaires localement
  5. Tester
  6. Sauvegardez votre base de données live en la renommant
  7. Téléchargez votre copie locale de la base de données sur votre serveur de transfert
  8. Testez à nouveau
  9. Faites-en votre base de données ajustée votre base de données en direct

Assurez-vous que vous avez un moment où personne ne tripote la base de données (placez votre site en mode maintenance!).

Notes:

A)Si vous connaissez l'adresse IP et le port de votre serveur MySQL, vous pouvez vous connecter directement à celui-ci et lancer le vidage sur votre machine sans que SSH ne soit inséré dans le périphérique distant:

mysqldump -P3306  -h127.0.0.1 -uroot -pYourPassWord databasename > ./dbdumps

L'illustration ci-dessus le videra dans un sous-dossier de votre répertoire actuel (pwd) nommé dbdumps. Vous devriez le créer à l'avance.

B)En supposant que vous ayez Bash disponible (la ligne de commande - sh suffira quand même, sinon, vous pouvez utiliser quelque chose comme le script suivant. Ajoutez-le à un fichier nommé convert.sh. En supposant également que vous ayez WP CLI installé localement (ou votre machine Vagrant, le conteneur Docker, quel que soit l'environnement de développement que vous utilisez localement):

#!/usr/bin/env bash
for id in $(wp post list --field=ID); 
do
    wp post update $id --post_name=foobar
done

Comme vous n'avez pas détaillé cette conversion pour vos messages slug, vous devrez trouver un moyen de régler foobar dans l'exemple ci-dessus. Il y a des dizaines de réponses Stackoverflow sur la rubrique tag: bash pour vous aider. Comme d'habitude (sed pour le sauvetage } _ - il n'y a rien au monde qui ne puisse être corrigé avecawk ET seddans un script Shell.

Vous pouvez exécuter le script Shell ci-dessus comme suit depuis votre terminal:

sh convert.sh

Essayez, échouez, rincez et répétez .

J'ai écrit ça surtout dans ma tête, vous devrez donc le tester. Mieux vaut faire une copie de votre base de données locale afin de pouvoir la lancer à nouveau.

2
kaiser