Wordpress
Echec mise à jour WordPress: Indisponibilité temporaire pour cause de maintenance. Veuillez revenir dans un instant.
4Petit article vite fait pour vous faire part d’une petite astuce que j’ai découverte pour réparer votre blog WordPress en cas de mise à jour qui aurait rencontré un échec. Suite à cet échec toutes les pages de votre sites renvoient le message « Indisponibilité temporaire pour cause de maintenance. Veuillez revenir dans un instant. »
Il vous suffit simplement de vous connecter en FTP sur votre serveur et de supprimer le fichier « .maintenance« . Comme il s’agit d’un fichier caché, il faudra forcer l’affichage des fichiers cachés sur votre logiciel FTP.
Script pour insérer des article automatiques sur WordPress
0Suite à mon précédent billet sur comment insérer des billets automatiques avec WordPress, je n’avais pas publié le script php que j’utilisais à titre personnel pour l’autre blog dont je m’occupe « Les perles du net.fr ».
Via une tache automatisée (on appelle ça une tache cron), tous les jours ce le script ci-dessous est appelé automatiquement et va préparer un article qui sera publié plus tard dans la journée.
Voici donc le code qui se passe de commentaires, puisque j’ai essayé de le commenter au mieux. Si vous avez suivi le tuto pour insérer des articles de façon automatique dans wordpress, vous comprendrez donc ce que fait chaque insertion en base de donnée!
$dir = 'wp-content/uploads/';
list($annee, $mois) = explode('-', date('Y-m');
// Si le dossier correspondant à l'année en cours existe déjà
if(is_dir($dir.$annee))
{
if(!is_dir($dir.$annee.'/'.$mois)) // Si le sous dossier "mois" du dossier "année" n'existe pas, on le crée
{
mkdir($dir.$annee.'/'.$mois);
}
}
// Si rien n'existe on crée le dossier et le sous dossier
else
{
mkdir($dir.$annee);
mkdir($dir.$annee.'/'.$mois);
}
// Le chemin complet du dossier d'upload
$repertoire = $dir.$annee.'/'.$mois.'/';
[Ici, j'ai un script (non visible dans ce code) qui ouvre un socket pour aller chercher sur un autre serveur la photo qui m'interesse et je la télécharge sur mon serveur]
// Le chemin de l'image publiée
$filename = $repertoire.'les-perles-du-net-le-chat-de-geluck-'.date('Ymd').'.jpg';
// Connexion BDD
$db_name = 'blablabla';
$db_user = 'utilisateur';
$db_password = 'motdepasse';
$db_host = 'localhost';
$link = mysql_connect($db_host, $db_user, $db_password);
mysql_select_db($db_name, $link);
// Je me sers d'un compteur pour incrémenter le nombre d'articles automatiques parrus.
$monfichier = fopen('compteur_lechat.txt', 'r+');
$cpt = intval(fgets($monfichier)) + 1; // On récupère la précédente valeur, qu'on incrémente
fseek($monfichier, 0); // On remet le curseur au début du fichier
fputs($monfichier, $cpt); // La nouvelle valeur du compteur est sauvegardée
fclose($monfichier);
// Tous les jours post à 10h!
list($d, $m, $y, $h, $i, $s) = explode('-', date('d-m-Y-H-i-s'));
$date = $y.'-'.$m.'-'.$d.' 10:00:00';
$post_date = $y.'-'.$m.'-'.$d.' 10:00:00';
$post_date_gmt = $y.'-'.$m.'-'.$d.' 08:00:00';
$date_update = $y.'-'.$m.'-'.$d.' '.$h.':'.$i.':'.$s;
$date_update_gmt = $y.'-'.$m.'-'.$d.' '.($h-2).':'.$i.':'.$s;
// Titre version originale
$titre = 'Le chat du jour #'.$cpt;
// Titre version slug (compatible URL)
$titre_slug = 'le-chat-du-jour-'.$cpt;
// Contenu
$today = $d.'/'.$m.'/'.$y;
$contenu = '
Retrouvez chaque jour à 10h une nouvelle image du célèbre chat de Philippe Geluck.
Découvrez le chat du '.$today.'
Retrouvez la liste des chats déjà parus
';
$q = ' INSERT INTO `wp_posts` (`ID`, `post_author`, `post_date`, `post_date_gmt`, `post_content`, `post_title`, `post_excerpt`, `post_status`, `comment_status`, `ping_status`, `post_password`, `post_name`, `to_ping`, `pinged`, `post_modified`, `post_modified_gmt`, `post_content_filtered`, `post_parent`, `guid`, `menu_order`, `post_type`, `post_mime_type`, `comment_count`)
VALUES ("",
"1",
"'.$post_date.'",
"'.$post_date_gmt.'",
"'.addslashes($contenu).'",
"'.$titre.'",
"",
"publish",
"open",
"open",
"",
"'.$titre_slug.'",
"",
"",
"'.$date_update.'",
"'.$date_update_gmt.'",
"",
"0",
"",
"0",
"post",
"",
"0");';
if(mysql_query($q)or die(mysql_error()))
{
// On met à jour le permalien de l'article avec l'id de ce dernier
$id = mysql_insert_id();
mysql_query('UPDATE `wp_posts` SET `guid` = "http://www.les-perles-du-net.fr/?p='.$id.'" WHERE `ID` = "'.$id.'"');
// Catégories. Mes articles autos vont toujours dans les mêmes trois catégories.
mysql_query('INSERT INTO `wp_term_relationships` (`object_id`, `term_taxonomy_id`, `term_order`) VALUES("'.$id.'", "8", "0"), ("'.$id.'", "9", "0"), ("'.$id.'", "10", "0")');
// Tags. Mes articles autos ont toujours les mêmes tags.
mysql_query('INSERT INTO `wp_term_relationships` (`object_id`, `term_taxonomy_id`, `term_order`) VALUES("'.$id.'", "384", "0"), ("'.$id.'", "1703", "0"), ("'.$id.'", "1704", "0"), ("'.$id.'", "1705", "0")');
}
Insérer des articles automatiques sur votre blog WordPress
9J’avais un petit script à réaliser pour publier des articles sans passer par l’administration classique du blog, je me suis donc récemment plongé dans l’architecture de la base de données WordPress afin de comprendre comment elle fonctionnait afin de pouvoir mettre en place mon script.
J’avais besoin qu’à intervalle régulier via un cron, des articles se créent automatiquement en allant chercher du contenu ailleurs (sur une autre base de donnée par exemple ou alors sur un ftp pour publier chaque jour une photo [ce qui était ici mon besoin]).
Plutôt que de garder pour moi les recherches que j’avais faites, je vous fait partager cela en espérant que ça puisse servir à d’autres!
Voici donc l’architecture simplifiée de votre base de données WordPress (nous ne verrons ici que la partie « article » sans nous préoccuper donc des comptes utilisateurs, commentaires…).
La table « wp_post »
Sans doute la table la plus importante puisque c’est le coeur du blog: les articles!
La table « wp_postmeta »
Cette table sert à ajouter des informations métas (couple clé => valeur) à un article.
Dans cet exemple sorti tout droit d’un de mes blogs, on peut voir que l’article « 3651″ a plusieurs informations qui lui sont rattachées tels qu’une pièce jointe, l’attribut alt de cette image, mais également les dimensions de cette image…
Elle est beaucoup utilisée pour le versionning des articles ce qui permet de récupérer d’anciennes versions d’un article. Dans notre exemple nous ne l’utiliserons pas mais je tenais à vous en parler.
Elle contient donc un tas d’informations différentes telles que la dernière date de modification de l’article, la personne qui a modifié ou contribué à l’article, enfin je vous conseille d’y jeter un oeil pour voir de vous même tout ce qu’elle contient!
La table « wp_term_taxonomy »
Cette table contient entre autres les id de catégories auxquels les articles seront rattachés. Les infos qui nous intéréssent ici sont les infos contenues dans la colonne « taxonomy » dont la valeur vaut : « category ».
On voit donc que mon autre blog il y a 7 catégories d’articles différentes.
Pour savoir à quoi correspondent ces id de catégories, il nous faut aller voir dans l’autre table qui lui est liée: « wp_terms »
La table « wp_terms »
Cette table contient deux données distinctes:
- La première est celle qui nous intéresse: c’est le nom des catégories « term_id » que l’on a vu dans la table du dessus. On y voit donc par exemple que le term_id = 9 correspond à la catégorie « Images drôles ».
- La seconde donnée est relative aux tags/mots clés associés aux articles. Tous les tags utilisés dans les articles se retrouvent aussi dans cette table.
Nous retrouvons donc dans cette table les infos liées au catégories mais également la liste des tags (dans cet exemple à partir du term_id > 12).
Le champ slug correspond au nom du « term » en version compatible au format url (accents et caractères spéciaux retirés).
La table « wp_term_relationships »
Cette table comme son nom l’indique presque va faire la liaison entre les articles et les « terms » (catégories et mots clés) qui lui sont associés.
Elle est très simple et ne contient que trois colonnes:
- object_id : l’id de l’article
- term_taxonomy_id : l’id du tag ou de la catégorie
- order: semble ne plus servir car pour mes 1000 articles, toutes les données sont à 0
Ici pour l’article 3649 on voit qu’il y a 4 « terms » associés, la valeur 1 dans « term_taxonomy_id » correspond à la catégorie par défaut « Non classé » (voir table wp_terms plus haut).
Concrètement vous avez maintenant deux solutions:
- Les tags et la catégories de vos articles automatiques ne changera pas (ce qui est mon cas, ce sera toujours des articles « Drôles » avec les tags « x » et « y » qui seront ajoutés de façon automatique):
J’ai donc créé manuellement les tags et les catégories auxquels mes articles automatisés seront rattachés. (insertion dans les tables « wp_term_taxonomy » et « wp_terms » ) et j’ai récupéré leur id respectives (ex je veux que mes articles aient toujours la catégorie « Images » et « Images drôles » leur Id respectifs sont 8 et 9 (voir la table « wp_terms »).
Il n’y a alors que très peu de choses à faire:
- Créer l’article en base dans la table « wp_post »
- Récupèrer l’id de l’article créé (avec mysql_insert_id() par exemple)
- Pour chaque term_id (dans mon exemple: 8 et 9), j’ajoute un enregistrement dans la table « wp_term_relationships » en spécifiant l’id de l’article récupéré à l’étape 2.
- Le tags et les catégories de vos articles automatiques peuvent changer en fonction de différents paramètres.
Il vous faudra donc:
- Créer dynamiquement des derniers en ajoutant vos nouvelles catégories dans la table « wp_terms_taxonomy » en spécifiant dans le champ « taxonomy » si il s’agit d’une catégorie (category) ou d’un tag (post_tag).
- Récupérer l’id créé (avec mysql_insert_id() par exemple.
- Insérer un enregistrement dans « wp_terms » avec l’id récupérer en étape 2.
- Stocker par exemple chaque id dans un tableau et une fois l’article publié vous affecterez à chaque « term_id » l’id de l’article créé (dans la table « wp_terms_relationship »).
- Créer l’article en base dans la table « wp_post »
- Récupèrer l’id de l’article créé (avec mysql_insert_id() par exemple)
- Pour chaque term_id récupéré à l’étape 4, j’ajoute un enregistrement dans la table « wp_term_relationships » en spécifiant l’id de l’article récupéré à l’étape 2.
Ressource supplémentaire:
Schéma complet de l’architecture de la base de données WordPress 3.0








Commentaires récents