Prise en main de WordPress : Différence entre versions

De Analyse Développement Hacking
Sauter à la navigation Sauter à la recherche
 
Ligne 867 : Ligne 867 :
 
  Plugin payant à 29 euros qui semble être une référence
 
  Plugin payant à 29 euros qui semble être une référence
 
  https://wpml.org/fr/purchase/
 
  https://wpml.org/fr/purchase/
 
===QTranslate===
 
Widget gratuit.
 
https://wordpress.org/plugins/qtranslate/
 
D'après l'article : https://wpscouts.com/site-wordpress-multilingue/
 
  
 
===Autres ressources===
 
===Autres ressources===

Version du 12 janvier 2020 à 19:28

Consulter le wiki : Accueil du wiki - Objectifs - Administrateur - Bureautique - Développeur - Intégrateur - Marketing - Multimédia - Objets numériques - Jeux - We make Hack
Consulter le site : Accueil du site - Annuaire - Blog - Forum - Outils - Utilisateur     Consulter le Redmine : Accueil du Redmine

Sommaire

Prise en main de WordPress

Accessibilité

Rendre WordPress accessible :
Source : https://make.wordpress.org/accessibility/page/3/

Base de données Wordpress

Les 12 tables par défaut de WordPress

wp_commentmeta : Stocke les meta informations sur les commentaires.
wp_comments : Stocke les commentaires des articles et pages.
wp_links : Regroupe tous les liens de l'ancien onglet Liens dans l'administration de WordPress, utile pour des anciennes versions.
wp_options : Stocke les configurations générales du site, notamment celles renseignées durant son installation.
wp_postmeta : Liée à la table wp_posts, cette table regroupe des informations complémentaires en rapport avec les pages et articles.
wp_posts : Stocke les données sur les posts, pages, médias (images, docs pdf et vidéo), ou encore les produits des extensions E-commerce.
wp_terms : Stocke les étiquettes (mots-clés). Cette table est en lien avec la taxonomie de WordPress, wp_term_relationships et wp_term_taxonomy.
wp_termmeta : ?
wp_term_relationships : Permet l'association des étiquettes (mots-clés, tags) avec les articles et pages. En lien avec la table précédente et la table suivante.
wp_term_taxonomy : On y retrouve des informations complémentaires concernant les éléments de taxonomie pour leur différentiation.
wp_usermeta : Stocke la configuration des utilisateurs, leur rôle, les informations complémentaires.
wp_users : Stocke les utilisateurs, leurs noms, leur mot de passe, l'adresse mail.

Créer une base de données pour WordPress

CREATE DATABASE wordpress;
GRANT ALL PRIVILEGES ON wordpress.* TO 'WordPress'@'localhost' IDENTIFIED BY 'mot_de_passe';
FLUSH PRIVILEGES;
QUIT;

Modifier l'encodage de caractères en utf8mb4

# Depuis WordPress 4.2, il faut basculer de utf8 à utf8mb4 pour l'encodage de caractères de la base de données.
# Cette information est définie dans le fichier wp-config.php.
# Vérifier l'interclassement de votre base de données qui est généralement défini sur latin1 dans les configurations serveurs par défaut.
# Avec phpMyAdmin, aller dans l'onglet Opérations puis Interclassement.
# Changer pour utf8mb4_unicode_ci. Faire de même pour l'ensemble des tables qui ne disposeraient pas du bon interclassement.

Les requêtes SQL pour nettoyer la base de données de WordPress

Supprimer les révisions des articles de la base de données de WordPress

# Exemple pour supprimer les révisions des articles de la base de données de WordPress :
DELETE FROM `wp_posts` WHERE `post_type` = 'revision';
# Préférer cette seconde méthode :
DELETE a,b,c FROM wp_posts a
LEFT JOIN wp_term_relationships b ON (a.ID = b.object_id)
LEFT JOIN wp_postmeta c ON (a.ID = c.post_id)
WHERE a.post_type = 'revision'
# Préférer cette troisième méthode plus précise encore qui prend également en compte les éléments liés dans la table term_taxonomy.
DELETE a,b,c FROM wp_posts a
LEFT JOIN wp_term_relationships b ON (a.ID = b.object_id)
LEFT JOIN wp_postmeta c ON ( a.ID = c.post_id )
LEFT JOIN wp_term_taxonomy d ON ( b.term_taxonomy_id = d.term_taxonomy_id)
WHERE a.post_type = 'revision'
AND d.taxonomy != 'link_category';

Supprimer les sauvegardes automatiques des pages et articles

# Dans la même table, on peut supprimer les sauvegardes automatiques de pages et d'articles :
DELETE FROM wp_posts WHERE post_status = 'auto-draft';

Nettoyer la table wp_options

DELETE FROM `wp_options` WHERE `option_name` LIKE ('_transient_%');
DELETE FROM `wp_options` WHERE `option_name` LIKE ('_site_transient_%');
# Plus globalement :
DELETE FROM `wp_options` WHERE `option_name` LIKE '%transcient%';
Source : https://www.seomix.fr/transient-wordpress/
Maîtriser les transients pour optimiser votre site : https://wpformation.com/transients-wordpress/

Supprimer les commentaires marqués en spam

DELETE FROM wp_comments WHERE comment_approved = 'spam';
# Supprimer les commentaires non approuvés :
DELETE from wp_comments WHERE comment_approved = '0';
0 = En attente de modération
1 = Approuvé
spam = Marqué comme spam

Supprimer les Metas des articles après suppression d'un plugin

# Suite à la suppression d'un plugin certaines informations restent en base de données.
# Supprimer les plugins qui ne sont plus utilisés : https://wp-rocket.me/blog/wordpress-plugins-many/
DELETE FROM wp_postmeta WHERE meta_key = 'META-KEY-NAME';

Supprimer les Pingbacks et les Trackbacks

Cette technique de maillage externe est ancienne et semble être de moins en moins utilisée.

Définition de Pingback

# Ce mécanisme limité à quelques CMS était à la mode il y a quelques années mais il a été surtout été exploité pour du spam ou le pirater de sites.
# Les Pingbacks sont spécifiques à WordPress et ont été conçus pour signaler qu'il existe un lien entre deux articles sur deux blogs différents.
# Les deux blogs doivent avoir la fonctionnalité des Pingbacks activée, soit dans leurs blogs respectifs, soit sur un article en particulier.
# Quand vous insérez un lien de commentaire sous un article d'un autre site, il pourra afficher une mention signalant l'existence du lien.
# Le Pingback est un processus au cours duquel un blogueur poste un commentaire en réponse à un article sur un site WordPress.
# Un Pingback, un Rétrolien ou encore un lien réciproque est un lien créé de manière automatique entre les deux contenus.
# Si l'article A fait un lien vers l'article B, alors un lien automatique sera créé sur l'article B vers la page A.
# Une fois approuvé, le Pingback sera publié dans la section commentaires avec un lien vers l'article.
# Les Pingbacks sont envoyés automatiquement lorsque quelqu'un lie un commentaire vers votre contenu.
# Dans la majeur partie des cas, la plupart des rétroliens sont susceptibles d'êtres des spams.
# Les Pingbacks peuvent être approuvés ou détruits tout comme les commentaires de blog.
Ajouter des services de Pings sur WordPress
# Par défaut cette fonctionnalité est activée sur toutes les installations WordPress.
# Administration WordPress / Réglages / Discussion / « Réglages d'article par défaut ».
# Vérifier que la case « Autoriser les notification de lien en provenance d’autres blogs (pings et rétroliens) sur les nouvelles publications. » est bien cochée.
# Réglages / Écritures depuis le Backoffice de WordPress.
# Copier Coller la liste suivante dans "Services de mise à jour".
# Liste proposée par Olivier Andrieu :
http://rpc.pingomatic.com/
http://ping.feedburner.com/
http://blogsearch.google.co.uk/ping/RPC2
http://blogsearch.google.com/ping/RPC2
http://blogsearch.google.be/ping/RPC2
http://blogsearch.google.de/ping/RPC2
http://blogsearch.google.es/ping/RPC2
http://blogsearch.google.fr/ping/RPC2
http://blogsearch.google.us/ping/RPC2
http://blog.goo.ne.jp/XMLRPC
http://blog.with2.net/ping.php
http://ping.fc2.com/
http://rpc.blogrolling.com/pinger/
http://serenebach.net/rep.cgi
http://ping.bitacoras.com/
http://ping.blo.gs/
http://tweetmeme.com/update/ping
http://www.bing.com/webmaster/ping.aspx?siteMap=
http://www.i-learn.jp/ping/
http://rpc.twingly.com/
http://xping.pubsub.com/ping/
Désactiver les Pingsbacks internes sur WordPress
# Par défaut WordPress accepte tous les Pingbacks, même ceux à l'intérieur de votre propre site ce qui n'a aucun intérêt et est même gênant !
# On peut désactiver les Pingbacks de plusieurs façon :
# Désactiver les pingbacks pour tous les articles.
# Administration WordPress / Réglages / Discussion / « Réglages d'article par défaut ».
# Vérifier que la case « Autoriser les notification de lien en provenance d’autres blogs (pings et rétroliens) sur les nouvelles publications. » est bien décochée.
# Le problème, c'est que si des articles sont déjà écrits et configurés pour utiliser le Pingback, ils vont conserver le réglage par défaut qui est d'accepter les Pingbacks.
# Si un lien est créé vers ces articles, un nouveau rétrolien sera créé et proposé pour la publication.
# Avec peu d'articles à gérer, les Pingbacks peuvent être désactivés pour chaque article depuis l'interface d'administration.
# On peut ainsi (dés)activer les commentaires et les rétroliens à la demande.
# Avec beaucoup d'articles, on peut couper les Pingbacks en une seule fois avec les deux requêtes SQL suivantes :
UPDATE wp_posts SET ping_status='closed' WHERE post_status = 'publish' AND post_type = 'post';
UPDATE wp_posts SET ping_status='closed' WHERE post_status = 'publish' AND post_type = 'page';
# Installer un Plugin.
# Ajouter ce code php quelque part dans le fichier functions.php du thème :
# Aller dans Apparence, puis dans Éditeur, et ouvrir le fichier functions.php du thème activé.
# Attention ! En cas de mise à jour du thème, si les créateurs modifient le fichier functions.php, les changements seront perdus et il faudra remettre ce code.
# De plus les Pingbacks internes qui étaient déjà en place le seront toujours, il faudra donc les supprimer manuellement.
/* Désactivation Pingbacks internes */
 function no_self_ping( &$links ) {
  $home = get_option( 'home' );
  foreach ( $links as $l => $link )
  if ( 0 === strpos( $link, $home ) )
  unset($links[$l]);
 }
 add_action( 'pre_ping', 'no_self_ping' );
 /* Fin Désactivation Pingbacks internes */
# Où encore pour couper la fonction pour rendre tout pingback impossible.
add_filter( 'xmlrpc_methods', 'remove_xmlrpc_pingback_ping' );
function remove_xmlrpc_pingback_ping( $methods ) {
unset( $methods['pingback.ping'] );
return $methods;
};
Sécurité et Pingbacks
# La première et principale méthode de prévention de la vulnérabilité des Pingback sur un site WordPress est de désactiver le pingback.
# La méthode n'est pas considérée comme appropriée par de nombreux utilisateurs de WordPress car cela empêche les véritables pingback provenant de diverses sources.
# Il existe plusieurs vulnérabilités qui ne peuvent être évitées simplement en désactivant l'option Pingback depuis le menu Paramètres.
# Certaines vulnérabilités ne peuvent pas être complètement évitées mais on peut faire des efforts pour réduire au minimum l'effet de la vulnérabilité sur les sites WordPress.
Désactiver le filtre XML-RPC depuis le fichier .htaccess
# protect xmlrpc
<IfModule mod_alias.c>
RedirectMatch 403 /xmlrpc.php
</IfModule>
Où :
# protect xmprpc
<Files xmlrpc.php>
Order Deny,Allow
Deny from all
</Files>
Où en autorisant certaines adresses IP :
# protect xmprpc
<Files xmlrpc.php>
Order Deny,Allow
Deny from all
Allow from xx.yyy.xx.zzz
Allow from xx.zzz.xx.yyy
</Files>
Désactiver le filtre XML-RPC depuis le fichier wp-config.php
add_filter ('xmlrpc_enabled »,« __return_false');
# Après la ligne :
require_once (ABSPATH «wp-settings.php.);
Désactiver le filtre XML-RPC depuis le fichier functions.php du thème
# Vous pouvez supprimer la fonctionnalité du Pingback XML-RPC en ajoutant la ligne suivante à votre fichier functions.php :
add_filter( 'xmlrpc_methods', 'remove_xmlrpc_pingback_ping' );
function remove_xmlrpc_pingback_ping( $methods ) {
unset( $methods['pingback.ping'] );
return $methods;
};

Définition des Trackbacks

# Un trackback peut être considéré comme un commentaire WordPress externe.
# Les Trackbacks peuvent être une bonne façon ou manière de voir qui lie son contenu à votre blog et commenter ces liens peut permettre d'améliorer sa notoriété.
# Si un autre blog utilise un logiciel différent pour faire des liens vers vos articles, il peut envoyer des notifications manuellement, un Trackback, pour vous le faire savoir.

Nettoyer tous les Pingbacks et Trackbacks pour nettoyer la base de données

# Désactiver les Pingbacks et les Trackbacks avant de supprimer le contenu pour éviter de se voir proposer de nouvelles informations par la suite.
# Supprimer les pingbacks de WordPress :
DELETE FROM wp_comments WHERE 'comment_type' = 'pingback';
# Supprimer les trackback de WordPress :
DELETE FROM wp_comments WHERE comment_type = 'trackback';
# Le plugin WP-Optimize pourra aussi optimiser la base de données régulièrement pour que tout reste rapide, et supprimer les Pingbacks en cochant l'option.
# C'est simple et efficace, penser néanmoins à faire une sauvegarde de la base de données avant toutes tentatives d'optimisation.
# Source : https://wordpress.org/plugins/wp-optimize/
# Si les Pingbacks existants sont supprimés, le nombre des commentaires affichés sous vos articles ne seront pas mis à jour automatiquement.
# Il faut modifier la base de données pour recompter tous les commentaires des articles.
# Vérifier si il faut recompter en utilisant cette commande SQL. La base correspondant au site WordPress est ici nommée "wordpress".
# Si aucun résultat n'est retourné, il est inutile de continuer, tout va bien.
SELECT wpp.id, wpp.post_title, wpp.comment_count, wpc.cnt
FROM wordpress.wp_posts wpp
LEFT JOIN
(SELECT comment_post_id AS c_post_id, count(*) AS cnt FROM wordpress.wp_comments
 WHERE comment_approved = 1 GROUP BY comment_post_id) wpc
ON wpp.id=wpc.c_post_id
WHERE wpp.post_type IN ('post', 'page')
      AND (wpp.comment_count!=wpc.cnt OR (wpp.comment_count != 0 AND wpc.cnt IS NULL));
# Si des lignes sont retournées par la précédente requête, alors, le nombre de commentaires doit être mis à jour :
UPDATE wordpress.wp_posts wpp
LEFT JOIN
(SELECT comment_post_id AS c_post_id, count(*) AS cnt FROM wordpress.wp_comments
 WHERE comment_approved = 1 GROUP BY comment_post_id) wpc
ON wpp.id=wpc.c_post_id
SET wpp.comment_count=wpc.cnt
WHERE wpp.post_type IN ('post', 'page')
      AND (wpp.comment_count!=wpc.cnt OR (wpp.comment_count != 0 AND wpc.cnt IS NULL));

Supprimer les liens externes ajoutés aux commentaires

# Le champ Site Web présent dans le formulaire de dépôt de commentaire permet de déposer un lien externe.
# L'auteur du commentaire indique l'adresse URL de son site Web.
# Cette fonctionnalité est largement utilisée pour générer un lien retour à moindre coût et sujet au spam.
# Elle n'apporte pas grand chose pour le visiteur et nuit au référencement malgré l'ajout d'une balise nofollow.
# Supprimer les liens ajoutés aux commentaires en totalité.
UPDATE `wp_comments` SET `comment_author_url`=NULL
# Il faudra également modifier le formulaire de commentaire présent dans le thème pour retirer le champ Site Web pour prévenir tout nouvel ajout de lien externe.

Identifier les Tags inutilisés

# Voici comment identifier les tags non utilisés sur votre WordPress :
SELECT * From wp_terms wt
 INNER JOIN wp_term_taxonomy wtt ON wt.term_id=wtt.term_id WHERE wtt.taxonomy='post_tag' AND wtt.count=0;

Supprimer les tags non utilisés

# Supprimer toutes les entrées de wp_term_taxonomy pour lesquelles on ne trouve pas d'entrée de même term_taxonomy_id dans wp_term_relationships :
DELETE FROM wp_term_taxonomy
WHERE NOT EXISTS (
SELECT 1
FROM wp_term_relationships tr
WHERE wp_term_taxonomy.term_taxonomy_id = tr.term_taxonomy_id)
AND taxonomy = "post_tag";
# Supprime toutes les entrées de wp_terms pour lesquelles on ne trouve pas d'entrée de même term_id dans wp_term_taxonomy :
DELETE FROM wp_terms
WHERE NOT EXISTS (
SELECT 1
FROM wp_term_taxonomy tt
WHERE wp_terms.term_id = tt.term_id);

Supprimer tous les tags

DELETE a,b,c
FROM prefix_terms AS a
LEFT JOIN prefix_term_taxonomy AS c ON a.term_id = c.term_id
LEFT JOIN prefix_term_relationships AS b ON b.term_taxonomy_id = c.term_taxonomy_id
WHERE c.taxonomy = 'post_tag'

Nettoyage des sessions WordPress

SELECT * FROM `wp_options` WHERE `option_name` LIKE '_wp_session_%';
DELETE FROM `wp_options` WHERE `option_name` LIKE '_wp_session_%';

Nettoyer la table wp_commentmeta utilisée par Akismet

# Akismet est le plugin anti-spam de WordPress.
# A chaque fois qu'un commentaire est contrôlé, Akismet ajoute des informations sur la véracité du commentaire, validé ou spam, en base de données.
# Il peut aussi rajouter « signalé comme spam par UTILISATEUR » ou encore « marqué comme légitime par UTILISATEUR ».
# Une fois le commentaire validé il n'est plus nécessaire de conserver ces informations en base de données.
# Vérifier la table wp_commentmeta pour Akismet :
SELECT * FROM wp_commentmeta WHERE meta_key LIKE '%akismet%';
# Nettoyer la table wp_commentmeta :
DELETE FROM wp_commentmeta WHERE comment_id NOT IN (SELECT comment_id FROM wp_comments);
# Supprime les informations d'Akismet dans la table wp_commentmeta :
DELETE FROM wp_commentmeta WHERE meta_key LIKE '%akismet%';

Dépannage des données chargées automatiquement dans la table wp_options

# En cas de lenteurs sur votre site WordPress, cela peut être dû à une requête ou à des données chargées automatiquement laissées par une ancienne extension WordPress.
# Observer les données qui sont chargées automatiquement :
SELECT * FROM `wp_options` WHERE `autoload` = 'yes';
# Vérifier la taille des données chargées automatiquement.
SELECT SUM(LENGTH(option_value)) as autoload_size FROM wp_options WHERE autoload='yes';
SELECT 'autoloaded data in KiB' as name, ROUND(SUM(LENGTH(option_value))/ 1024) as value FROM wp_options WHERE autoload='yes'
UNION
SELECT 'autoloaded data count', count(*) FROM wp_options WHERE autoload='yes'
UNION
(SELECT option_name, length(option_value) FROM wp_options WHERE autoload='yes' ORDER BY length(option_value) DESC LIMIT 10);
# Trier les plus grandes données chargées automatiquement :
SELECT option_name, length(option_value) AS option_value_length FROM wp_options WHERE autoload='yes' ORDER BY option_value_length DESC LIMIT 10;

Optimiser une table

OPTIMIZE TABLE le_nom_de_la_table

Ajouter un index au chargement automatique

Si le nettoyage de la table wp_options n'est pas suffisant pour améliorer les performances du site, ajouter un « index » au champ de chargement automatique.
Cela peut aider à effectuer les recherches plus efficacement.
Source : https://guides.wp-bullet.com/add-mysql-index-wordpress-wp_options-table/

Nettoyer les do_pings

Source : https://wp-mix.com/wordpress-clean-up-do_pings/

Requêtes SQL pour la maintenance de WordPress

Changer le nom d'administrateur Admin

# Chaque installation de WordPress crée un compte avec un nom d'utilisateur "Admin" par défaut. Cela peut être un problème de sécurité car un pirate peut facilement forcer le compte admin de WordPress.
UPDATE wp_users SET user_login = 'Votre-Nouveau-Login' WHERE user_login = 'Admin';

Changer l'ID administrateur

UPDATE wp_users SET ID = 5487 WHERE ID = 1;
UPDATE wp_posts SET post_author = 5487 WHERE post_author = 1;
UPDATE wp_comments SET user_id = 5487 WHERE user_id = 1;
UPDATE wp_usermeta SET user_id = 5487 WHERE user_id = 1;
ALTER TABLE wp_users AUTO_INCREMENT = 5488
# Pour un WordPress multisite, dupliquer autant de fois que nécessaire les deux lignes suivantes :
UPDATE wp_2_posts SET post_author = 5487 WHERE post_author = 1;
UPDATE wp_2_comments SET user_id = 5487 WHERE user_id = 1;

Changer de nom de domaine dans la base de données

# Tester la présence de l'ancien domaine dans la base de données avec un script.
# Cette commande fonctionne sur le serveur debian, mais, ne retourne rien sur ma machine locale Linux Mint.
# Il est préférable de conforter cette commande avec une recherche de l'ancien domaine directement dans le fichier texte de la base de données.
#!/bin/bash
cat test.sql | grep https://www.MonAncienneURL.tld | grep -io "INTO [^ ]*" | grep "INTO \`" | sort --unique | grep -o "\`.*\`" 

# Lancer le script :
./lister-dans-quelles-tables-existent-une-url.sh
# Se connecter à la base de données et sélectionner la base de données pour faire les modifications :
USE la_base_a_utiliser
# Les quatre étapes suivantes sont nécessaires.
# 1 :
UPDATE wp_options SET option_value = replace(option_value, 'https://www.MonAncienneURL.tld', 'https://www.MaNouvelleURL.tld') WHERE option_name = 'home' OR option_name = 'siteurl';

# 2 :
UPDATE wp_posts SET guid = REPLACE (guid, 'https://www.MonAncienneURL.tld', 'https://www.MaNouvelleURL.tld');

# 3 :
UPDATE wp_posts SET post_content = REPLACE (post_content, 'https://www.MonAncienneURL.tld', 'https://www.MaNouvelleURL.tld');

# 4 : (Revérifier sur .com et .uk)
UPDATE wp_postmeta SET meta_value = REPLACE (meta_value, 'https://www.MonAncienneURL.tld','https://www.MaNouvelleURL.tld');
Ok-ko.png Source complémentaire : https://www.ionos.fr/digitalguide/hebergement/blogs/migration-wordpress-conseils-pour-changer-de-serveur/
Ok-ko.png Source complémentaire : https://wpmarmite.com/migrer-wordpress-manuellement/

Changer les adresses URL du site dans la base de données avec un plugin

Utiliser un plugin pour finaliser le remplacement de "http://domaine.old" par "http://domaine.new" car les tables de la base n'ont pas toutes été mises à jour.
Utiliser Better Search and Replace mais d'autres Plugins existent :
Better Search and Replace : https://wordpress.org/plugins/better-search-replace/
Search and Replace : https://fr.wordpress.org/plugins/search-and-replace/

Changer le mot de passe d'un utilisateur

# Pour changer ou de réinitialiser un mot de passe utilisateur dans WordPress :
UPDATE wp_users SET user_pass = MD5( 'nouveau_mot_de_passe' ) WHERE user_login = 'Le-pseudo-pour-un-utilisateur';

Assigner tous les articles pour un auteur A vers un auteur B

UPDATE wp_posts SET post_author = 'nouvel-auteur-ID' WHERE post_author = 'ancien-auteur-ID';

Chercher et remplacer du contenu dans les articles WordPress

# Pour remplacer facilement un contenu par un autre :
UPDATE wp_posts SET 'post_content' = REPLACE ('post_content', 'Ancien_Texte', 'Nouveau_Texte');

Exporter les mails des commentateurs

# Récupérer les adresses mails des commentateurs de votre blog :
SELECT DISTINCT comment_author_email FROM wp_comments;

Désactiver les commentaires pour les vieux articles

# Pour nez plus avoir à modérer les commentaires de vos vieux articles, désactiver les commentaires de ces derniers en fonction d'une date :
UPDATE wp_posts SET comment_status = 'closed' WHERE post_date < '2012-01-01'

Désactiver tous les plugins activés de WordPress

# Une requête permettant de désactiver l'ensemble de vos plugins :
UPDATE wp_options SET option_value =  WHERE option_name = 'active_plugins';

Modifier le statut de publication des articles pour une catégorie donnée

UPDATE wp_posts p JOIN wp_term_relationships r ON r.object_id = p.ID JOIN wp_term_taxonomy t ON r.term_taxonomy_id = t.term_taxonomy_id JOIN wp_terms terms ON terms.term_id = t.term_id SET p.post_status = 'publish' WHERE t.taxonomy ='category' AND terms.name = 'NomCatégorie' AND p.post_type = 'post';

Réparer les caractères illisibles

# Vous avez des problèmes d'encodage de caractères ?
# Au lieu de nettoyer les articles et commentaires un par un, lancer les requêtes suivantes pour les remplacer.
UPDATE wp_posts SET post_content = REPLACE(post_content, '“', '“');
UPDATE wp_posts SET post_content = REPLACE(post_content, '”', '”');
UPDATE wp_posts SET post_content = REPLACE(post_content, '’', '’');
UPDATE wp_posts SET post_content = REPLACE(post_content, '‘', '‘');
UPDATE wp_posts SET post_content = REPLACE(post_content, '—', '–');
UPDATE wp_posts SET post_content = REPLACE(post_content, '–', '—');
UPDATE wp_posts SET post_content = REPLACE(post_content, '•', '-');
UPDATE wp_posts SET post_content = REPLACE(post_content, '…', '…');
UPDATE wp_comments SET comment_content = REPLACE(comment_content, '“', '“');
UPDATE wp_comments SET comment_content = REPLACE(comment_content, '”', '”');
UPDATE wp_comments SET comment_content = REPLACE(comment_content, '’', '’');
UPDATE wp_comments SET comment_content = REPLACE(comment_content, '‘', '‘');
UPDATE wp_comments SET comment_content = REPLACE(comment_content, '—', '–');
UPDATE wp_comments SET comment_content = REPLACE(comment_content, '–', '—');
UPDATE wp_comments SET comment_content = REPLACE(comment_content, '•', '-');
UPDATE wp_comments SET comment_content = REPLACE(comment_content, '…', '…');

Changer le chemin des images

# Vous avez décidé d'utiliser un CDN tel que Amazon, utiliser la requête suivante pour changer le chemin de vos images vers le CDN.
UPDATE wp_posts SET post_content = REPLACE (post_content, 'src="https://www.anciensiteurl.com', 'src="https://votrecdn.nouveausiteurl.com');
# Il faudra également changer le GUID des images jointes :
UPDATE wp_posts SET  guid = REPLACE (guid, 'http://www.anciensiteurl.com', 'http://votrecdn.nouveausiteurl.com') WHERE post_type = 'attachment';

Supprimer et/ou remplacer un Shortcode dans les articles

# Les shortcodes WordPress c'est toujours pratique mais quand on change son thème WordPress, il arrive parfois qu'ils ne soient plus compatibles.
# La requête suivante permet de supprimer ou de remplacer les Shortcodes qui ne fonctionneraient plus.
UPDATE wp_post SET 'post_content' = REPLACE ('post_content', '[AncienShortcode]', 'Rien ou NouveauShortcode' );

Requêtes d'affichage

Rechercher les articles d'une catégorie donnée

SELECT post_title FROM wp_posts p JOIN wp_term_relationships r ON r.object_id = p.ID JOIN wp_term_taxonomy t ON r.term_taxonomy_id = t.term_taxonomy_id JOIN wp_terms terms ON terms.term_id = t.term_id WHERE t.taxonomy ='category' AND terms.name = 'NomCatégorie' AND p.post_type = 'post';

Nombre d'articles publiés en 2019

SELECT COUNT(*) FROM wp_posts WHERE post_status="publish" AND post_date BETWEEN '2019-01-01' AND '2019-12-31';

Nombre total de commentaires pour les articles en 2019

SELECT SUM(comment_count) FROM wp_posts WHERE post_status="publish" AND post_date BETWEEN '2019-01-01' AND '2019-12-31' GROUP BY post_status;

Top 10 des articles les plus commentés en 2019

SELECT post_title,comment_count FROM wp_posts WHERE post_status="publish" AND post_date BETWEEN '2019-01-01' AND '2019-12-31' ORDER BY comment_count DESC LIMIT 0,10;

Top 10 des meilleurs commentateurs sur votre site en 2019

SELECT comment_author,COUNT(comment_count) AS F01 FROM wp_comments,wp_posts WHERE comment_approved=1 AND comment_post_ID=ID AND comment_date BETWEEN '2019-01-01' AND '2019-12-31' GROUP BY comment_author ORDER BY F01 DESC LIMIT 0,10;

Requêtes pour ajouter de nouveaux éléments dans la base de données

Ajouter un custom field à tous les articles et pages

INSERT INTO wp_postmeta (post_id, meta_key, meta_value) SELECT ID AS post_id, 'MonCustomField' AS meta_key, 'MaValeur' AS meta_value FROM wp_posts WHERE ID NOT IN (SELECT post_id FROM wp_postmeta WHERE meta_key = 'MonCustomField');

Ajouter un custom field dans les articles uniquement

INSERT INTO wp_postmeta (post_id, meta_key, meta_value) SELECT ID AS post_id, 'MonCustomField' AS meta_key, 'MaValeur' AS meta_value FROM wp_posts WHERE ID NOT IN (SELECT post_id FROM wp_postmeta WHERE meta_key = 'MonCustomField') AND `post_type` = 'post';

Ajouter un custom field dans les pages uniquement

INSERT INTO wp_postmeta (post_id, meta_key, meta_value) SELECT ID AS post_id, 'MonCustomField' AS meta_key, 'MaValeur' AS meta_value FROM wp_posts WHERE ID NOT IN (SELECT post_id FROM wp_postmeta WHERE meta_key = 'MonCustomField') AND `post_type` = 'page';

Supprimer un custom field de tous les articles et pages

DELETE FROM wp_postmeta WHERE meta_key = 'MaValeur';

Supprimer un custom field de tous les articles uniquement

DELETE pm FROM wp_postmeta pm LEFT JOIN wp_posts wp ON wp.ID = pm.post_id WHERE wp.post_type =  'post' AND pm.meta_key =  'MonCustomField'

Supprimer un custom field de toutes les pages uniquement

DELETE pm FROM wp_postmeta pm LEFT JOIN wp_posts wp ON wp.ID = pm.post_id WHERE wp.post_type =  'page' AND pm.meta_key =  'MonCustomField'

Changer la valeur d’un custom field

UPDATE `wp_postmeta`
 SET `meta_value` = REPLACE(meta_value, 'AncienneValeur', 'NouvelleValeur')
 WHERE `meta_key` LIKE 'MonCustomField';

Optimiser le nettoyage de la base de données avec un plugin

WP-Optimize : https://wordpress.org/plugins/wp-optimize/
WP-Sweep : https://wordpress.org/plugins/wp-sweep/
WP-clean-up : https://wordpress.org/plugins/wp-clean-up/
Ok-ko.png : Source complémentaire : https://wordpress.org/plugins/wp-optimize/

Configurer le fichier functions.php

Cacher le numéro de version de WordPress

remove_action("wp_head", "wp_generator");

Cacher les erreurs de connexion

add_filter('login_errors',create_function('$a', "return null;"));

Masquer le message des erreurs de connexion

# La page de connexion affiche des messages d'erreurs trop précis.
# Il est possible de masquer ces messages d'erreur en ajoutant avec la ligne :
add_filter('login_errors', '__return_null');

Configurer le fichier wp-config.php

Changer l'adresse URL du site

define('WP_SITEURL', 'http://newdomain.com');
define('WP_HOME', 'http://newdomain.com');
# Changer également les anciennes occurrences dans le fichier sql contenant la base de données du site qui doit être déplacé :
sed -i "s/http\:\/\/ancien\.example\.com/https\:\/\/nouveau\.example\.com/g" wordpress.sql

Vider la corbeille automatiquement tous les X jours

define('EMPTY_TRASH_DAYS', X );

Arrêter les révisions des articles et pages de WordPress

define('WP_POST_REVISIONS', false );

Limiter les révisions des articles et pages de WordPress au nombre de X

define('WP_POST_REVISIONS', X );

Désactiver l'éditeur de fichiers

# Le premier outil qu'un hacker utilisera une fois sur votre site c'est le panneau d’administration de WordPress.
# Depuis ce panneau, un administrateur a la possibilité de modifier tous les fichiers du site depuis l'éditeur, il peut donc exécuter du code malveillant.
# Désactiver cette possibilité en ajoutant cette ligne dans le fichier de configuration :
define('DISALLOW_FILE_EDIT', true);

Désactiver les erreurs PHP

define ('WP_DEBUG', false);
define('WP_DEBUG_DISPLAY', false);
# La ligne "define('WP_DEBUG_DISPLAY', false);" revient à ajouter la ligne suivante dans le fichier .htaccess :
php_flag display_errors off

Définir des clefs de sécurité dans le fichier wp-config

En enlevant les clés du fichier, WordPress enregistrera les clés en base de données.
Dès lors, si les accès sont bien protégés, les clés ne seront pas lisible.
A suivre.

Configurer l'adresse mail expéditeur de WordPress

WordPress ne permet pas de configurer l'adresse mail expéditeur des mails qu'il envoie.
Il construit l'adresse mail avec wordpress@www.domain.tld, une adresse qui n'existe probablement pas et ne respecte donc pas les normes RFC.
- 3.3 Transactions (page 18) :
- The first step in the procedure is the MAIL command.
- MAIL FROM:<reverse-path> [SP <mail-parameters> ] <CRLF>
- 4.1.1.2. MAIL (MAIL) (page 33) :
- The reverse-path consists of the sender mailbox.
- Si l'adresse n'existe pas alors ce n'est pas un « mailbox » (boîte de réception de mail).
La solution recommandée est de créer un thème enfant de votre thème et d'ajouter des lignes dans le fichier fonctions.php pour remplacer l'adresse de leexpéditeur par une adresse qui existe.
Cette solution est compliquée pour un novice et ne survit pas à un changement de thème.
Une séparation des rôles impliquerait que ce ne serait pas au thème d'avoir à configurer de tels paramètres d'envoi de mails.
Une solution plus simple :
Utiliser le plugin : https://wordpress.org/plugins/wp-mailfrom-ii/
Une fois installé et activé, aller dans Réglages > Mail From et renseignee le nom de l'expéditeur dans From Name et l'adresse de l'expéditeur dans From Email Address.
Source : https://assistance.monarobase.net/configurer-ladresse-e-mail-expediteur-de-wordpress/

Images et miniatures

# WordPress crée à la volée plusieurs tailles d'images quand on en téléverse.
# Ces images sont utilisées par WordPress depuis la version 4.4 dans les tag "<img>" pour gérer les images responsives.
<img src="mon-image.jpg"
     srcset="mon-image-180.jpg 180w,
             mon-image-640.jpg 640w"
      sizes="50vw"
      alt="">

# Le tag "<img>" indique avec l'attribut srcset en plus de l'image contenue dans l'attribut "src" deux images supplémentaires : une image de 320px de large et une de 640px.
# L'attribut "sizes" indique également que notre tag "<img>" devra utiliser la moitié de la largeur totale du viewport.
# En visitant ce site avec un écran de 360 pixels de large, le navigateur chargera l'image "mon-image-180.jpg".
# Avec ces informations le navigateur pourra charger l'image idéale.
# WordPress redimensionne et recadre toutes les images en fonction des choix sélectionnés dans l'administration et en accord avec le thème utilisé.
# Décocher la case "Recadrer les images" pour parvenir aux dimensions exactes. Les miniatures resteront proportionnées.
# Modifier les tailles d'images par défaut peut être utile dans certains cas pour des besoins spécifiques à définir.
# Toutefois, il serait préférable de les laisser telles quelles et de créer des tailles d'images supplémentaires.
# Les valeurs de ces tailles d'images peuvent être modifier si réellement nécessaire depuis Réglage / Médias.
# Pour les déjà existantes, utiliser un plug-in pour régénérer les nouvelles miniatures.
# Generate Thumbnails : https://fr.wordpress.org/plugins/regenerate-thumbnails/
# WordPress est conçu par défaut pour générer 3 types de recadrage des images téléchargées (média).
# Il s'agit d'assurer la vitesse du site avec différentes tailles si nécessaire.
# Avec le téléchargement de l'image originale, il y aura au moins 4 fichiers :
Le fichier d'origine (Non rogné.)
Miniature / Vignette (Généralement 150 pixels x 150 pixels.)
Moyen (Généralement 300px × 300px.)
Grand (Généralement 1024 pixels x 1024 pixels.)
# A revoir :
# Il n'est pas recommandé de supprimer le code existant pour conserver le bon fonctionnement de son thème.
# Il faudrait alors supprimer les appels des autres fichiers où il est utilisé, généralement dans le fichier loop.php.

# Depuis le fichier /wp-admin/options-media.php on peut modifier les dimensions de la taille par défaut mais également ajouter une nouvelle taille.

# Utiliser la fonction add_image_size() dans le fichier functions.php pour ajouter une nouvelle taille d'image :
add_image_size( "$nom", $largeur, $hauteur, $proportion );
# Description des attributs :
$nom : chaîne - écrire le nom entre guillemets simples, c'est-à-dire 'portfolio'
$largeur : entier - écrire la largeur souhaitée, 500 (en px)
$hauteur : integer - écrire la hauteur souhaitée, 300 (en px)
$proportion : boolean - écrire true pour rogner l’image, sinon utiliser false
# L'attribut nommé "proportion" est nommé "crop" dans le Codex WordPress et correspond à un paramètre booléen (true/false).
# Les images générées doivent être proportionnées (false) ou recadrées pour être créées aux dimensions exactes (true).
# Exemple pour ajouter une taille_slide de largeur maximum de 300px et de hauteur automatique :
add_action( 'after_setup_theme', 'ajout_nouvelle_taille' );
function ajout_nouvelle_taille() {
    add_image_size( 'taille_slide', 300 );
}
# Taille de largeur maximum de 400px et de hauteur maximum de 200px :
add_image_size( 'taille_slide', 400, 200 );
# Utiliser un hardcrop pour avoir une image qui fait exactement 200px sur 200px avec le 4ème argument passé à "true".
# L'image va être coupée dans sa hauteur pour obtenir une image de 200px sur 200px.
# De base, la découpe se fait de façon à ce que le centre de la photo reste intacte.
# On peut définir où le crop va opérer avec un 4ème argument, un tableau avec un argument pour l'axe des X (largeur) et un autre pour l'axe des Y (hauteur).
add_image_size( 'taille_slide', 200, 200, true );
# Forcer WordPress a couper l'image par la gauche et par le haut, jusqu'à ce qu'elle fasse 200px sur 200px.
add_image_size( 'taille_slide', 200, 200, array( 'left', 'top' ) );
# Comme pour une image avec une taille par défaut, changer l'argument du nom de la taille pour utiliser une taille personnalisée "taille_slide".
echo wp_get_attachment_image( $attachment->ID, 'thumbnail' );
# A revoir :
# Différentes images peuvent être appelées en vedette à n'importe quel endroit du thème.
# Cet appel affichera la taille moyenne de l'image originale.
the_post_thumbnail( 'medium' );
# Utiliser la nouvelle taille 'portfolio' :
the_post_thumbnail( 'portfolio' );
# Notes :
# Dans la mesure où, par défaut, WordPress génère 3 tailles d'image personnalisables, il crée 4 fichiers pour chaque image.
# L'utilisation de plusieurs nouvelles tailles augmentera le nombre de fichiers stockés sur l'hôte de votre site.
# Utiliser plus de tailles d'image engendrera une augmentation des données a stocker.
# Le thème utilisé peut outrepasser les règles de base de WordPress et gérer lui-même l'affichage des images en capturant une fonction native : "wp_calculate_image_sizes()" ou "img_caption_shortcode()".
# Cela est également vrai pour certains plugins, qui pourraient générer eux même de nouvelles tailles de vignettes.
# Le widget amp semble créer de nouveaux formats pour les images.

Ajouter du Javascript dans WordPress

Permissions sur les Fichiers

Modifier les Permissions sur les Fichiers : https://codex.wordpress.org/fr:Modifier_les_Permissions_sur_les_Fichiers

Dans une page

Passer simplement l'éditeur en mode texte.
<script type="text/javascript">
var a = 5;
alert("Hello World. The value of a is : " + a);
</script>

Dans le head ou le footer

Ajouter un script Javascript dans le plugin "Header and Footer Scripts" pour insérer un code Javascript personnalisé.

Widgets

Créer une zone de Widget dans le template

functions.php

# Pour une seule zone.
if ( function_exists('register_sidebar') ) {
 register_sidebar(array(
 'name' => 'Sidebar',
 'before_widget' => '<div class="widget_sidebar">',
 'after_widget' => '</div>',
 'before_title' => '<h3>',
 'after_title' => '</h3>',
 ));	
 }
# Pour différentes zones.
if ( function_exists('register_sidebar') ) {
 register_sidebar(array(
 'name' => 'Sidebar',
 'before_widget' => '<div class="widget_sidebar">',
 'after_widget' => '</div>',
 'before_title' => '<h3>',
 'after_title' => '</h3>',
 ));
 register_sidebar(array(
 'name' => 'header_right',
 'before_widget' => '<div class="header_right" id="%1$s">',
 'after_widget' => '</div>',
 'before_title' => '<h3>',
 'after_title' => '</h3>',
 ));	  
 }

header.php

# Le fichier du template peut être header.php ou tout autre fichier ou l'on souhaite afficher le widget.
<div id="widget_header">
< ?php if ( !function_exists( 'dynamic_sidebar' ) || !dynamic_sidebar('header_right') ) ?>
</div>

Gestion des rôles de WordPress

Capability Manager Enhanced

Créer des rôles sur mesure : https://wordpress.org/plugins/capability-manager-enhanced/

Advanced Menu Widget

Advanced Menu Widget : https://nl.wordpress.org/plugins/advanced-menu-widget/

Afficher des drapeaux de pays

https://scrybs.com/fr/blog/best-country-flag-icons/

Nettoyer les données orphelines, dupliquées et inutiles avec WP Sweep

# Automatiser le processus avec l'extension WP Sweep.
# Facile d’utilisation et particulièrement efficace, cette extension exécute de nombreuses requêtes SQL pour nettoyer votre base de données.
Source : https://fr.wordpress.org/plugins/wp-sweep/

Classer les médias dans des catégories

Enhanced Media Library : https://fr.wordpress.org/plugins/enhanced-media-library/

Systèmes de points pour WordPress

Un système de points peut permettre de valoriser la participation des différents acteurs utilisant un site.
Plus les utilisateurs resteront sur le site, mieux le SEO s'en portera.
Les utilisateurs qui laissent des commentaires pourront se voir créditer de points...
Les rédacteurs, les clients d'une boutique, pourront générer des points...

Autres systèmes à points pour WordPress

https://wordpress.org/plugins/tags/points/
http://www.geekpress.fr/creer-systeme-points-commentaires-wordpress/
http://www.wpbeginner.com/plugins/add-points-system-ignite-user-engagement/

Boutique de commerce pour WordPress

WooCommerce

WooCommerce est un composant de boutique en ligne pour WordPress.
Configurer WooCommerce : https://leswebmastersdumidi.fr/guide-utilisateur-woocommerce/options-et-parametrage/configurer-woocommerce/
Cacher les produits en rupture de stock : https://woofrance.fr/forums/topic/ne-plus-afficher-les-produits-en-rupture-de-stock/

Correction de modèles WooCommerce obsolètes

WooCommerce / Statut / Statut du système
Source : https://docs.woocommerce.com/document/fix-outdated-templates-woocommerce/

Widgets complémentaires pour WooCommerce

WCFM Marketplace – WooCommerce Multivendor Marketplace
WCFM Marketplace – WooCommerce Multivendor Marketplace
https://wordpress.org/plugins/wc-multivendor-marketplace
WCFM Maketplace nécessite le plugin WCfM Dashboard pour être actif !
Je clique sur le bouton pour installer le Dashboard.
La configuration commence.
Lors de la configuration l'API Google peut être demandée, pour afficher les produits sur une carte.
Créer une clé API depuis Google Developers / Google Map : https://developers.google.com/maps/documentation/javascript/tutorial
WCFM – WooCommerce Frontend Manager
Exemple : demo.wcfmdemos.com/my-account/
WCFM - WooCommerce Multivendor Membership
Créer différents niveaux de membre (bronze, argent, or...) :
https://wclovers.com/knowledgebase/wcfm-membership/
Systèmes à points pour WooCommerce
MyCred
Site officiel : https://mycred.me
https://wordpress.org/plugins/mycred/
https://www.mycred.me/add-ons/gateway/
https://codex.mycred.me/chapter-iii/gateway/woocommerce/
https://codex.mycred.me/chapter-iii/gateway/woocommerce/pay-with-points/
Comment donner des points myCRED aux acheteurs de WooCommerce : https://memberfix.rocks/mycred-woocommerce/
Pour installer MyCred :
Extensions / Ajouter
Chercher MyCred.
Installer. Activer.
Extensions / Installation de MyCRED
Your First Point Type - Je laisse les options par défaut. Je rajoute le suffixe " Point ", car, ici, les produits ne vaudront que un seul point. Pas de difficultés pour afficher un s éventuel.
Pour utiliser MyCRED avec WooCommerce, il faudra alors configurer le système de paiement de WordPress.
MyCRED peut être cumulé à un autre système de paiement, mais, une seule devise doit servir pour acquérir le contenu d'un panier.
Autres systèmes de points pour WooCommerce
https://wordpress.org/plugins/gratisfaction-all-in-one-loyalty-contests-referral-program-for-woocommerce/
https://wordpress.org/plugins/beans-woocommerce-loyalty-rewards/
Ajouter des produits dans WooCommerce
Le système présenté précédemment est beaucoup plus performant !
Il permet le dépôt des produits, mais aussi, la gestion des produits, tout en proposant une boutique individuelle pour le vendeur, et, une boutique globale qui recense tous les produits.
Ce Widget permet uniquement d'ajouter un formulaire de saisie de produit en front-end pour WooCommerce : https://wordpress.org/plugins/ns-add-product-frontend/
J'ai désinstallé ce Widget qui ne répond pas aux attentes pour la bonne gestion des produits en ligne.
Comment créer soit même un tel formulaire en 12 étapes : https://toolset.com/learn/create-an-ecommerce-wordpress-site/
Géolocaliser les vendeurs de WooCommerce
https://woogeolocation.com

Correction de modèles WooCommerce obsolètes sur un template

https://docs.woocommerce.com/document/fix-outdated-templates-woocommerce/
http://translate.google.com/translate?hl=fr&sl=auto&tl=fr&u=https%3A%2F%2Fdocs.woocommerce.com%2Fdocument%2Ffix-outdated-templates-woocommerce%2F

Jeux concours

https://blogpascher.com/plugins-wordpress/8-plugins-wordpress-pour-integrer-des-concours-dans-votre-blog
https://interactif.com/comment-creer-des-concours-sur-votre-site-wordpress/
https://lafabriquedeblogs.com/blogue/concours-wordpress/
https://wpformation.com/organiser-concours-wordpress/

Shortcodes

Shortcodes : https://en.support.wordpress.com/shortcodes/

Ajouter un historique des actions utilisateurs

Simple History : https://wordpress.org/plugins/simple-history/

Intégrer un slider

Intégrer un slider d'images dans WordPress.

Afficher du contenu avec un shortcode

https://fr.wordpress.org/plugins/lorem-shortcode/

Afficher ou cacher des éléments en fonction de la date

https://fr.wordpress.org/plugins/shortcodes-to-show-or-hide-content/

Broken Link Checker

Un widget pour vérifier les liens morts de son site Wordpress : Broken Link Checker.

Optimiser WordPress avec wps-cleaner

Optimiser WordPress avec wps-cleaner.

Optimiser les images de WordPress

https://imagify.io/fr
https://wordpress.org/plugins/imsanity/
https://wordpress.org/plugins/wp-smushit/
https://wordpress.org/plugins/resmushit-image-optimizer/
# Semble le plus intéressant car pas limité :
https://wordpress.org/plugins/ewww-image-optimizer/

Personnaliser les mails de WordPress

Source : https://wpmarmite.com/personnaliser-emails-wordpress/

Ajouter le HSTS à WordPress

Widget : https://wordpress.org/plugins/lh-hsts/

Yoast SEO

https://audreytips.com/yoast-seo-wordpress/
L'extension Yoast SEO prend le soin d'ajouter automatiquement les balises Open Graph pour afficher une image adaptée aux réseaux sociaux.

Widgets pour sites multilingues

WPML

Plugin payant à 29 euros qui semble être une référence
https://wpml.org/fr/purchase/

Autres ressources

Créer un site multilingue ou multipays : https://wpmarmite.com/wordpress-multilingue/

Intégrer le contenu d'une page Mediawiki dans WordPress

Avec le Widget RDP Wiki Embed, une page de Mediawiki peut être affichée dans un article de WordPress.

Ajouter une carte

Novo-Map

Manuel : https://www.novo-monde.com/novo-map-manuel-utilisation/
Exemples : https://www.novo-monde.com/novo-map-wordpress-plugin-examples/

Leaflet Maps Marker

Source : https://fr.wordpress.org/plugins/leaflet-maps-marker/

OSM – OpenStreetMap

Source : https://fr.wordpress.org/plugins/osm/

Intégrer un forum

WP Discourse

Source : https://wordpress.org/plugins/wp-discourse/

Sauvegarder WordPress

BackWPup

Site officiel : https://fr.wordpress.org/plugins/backwpup/

Sauvegarde

Installer le plugin BackWPup.
Dresser la liste des plugins installés.
Sauvegarder le site.
Automatiser la sauvegarde avec cron.
Lien complémentaire : https://wpchannel.com/wordpress/tutoriels-wordpress/automatiser-sauvegarde-automatique-wordpress-ftp-mysql/

Restauration

Copier les fichiers sur le serveur à restaurer. (Ne pas charger les 3 fichiers suivants sur le FTP : base de données, données xml et liste de plugins.)
Supprimer les tables existantes et importer le fichier .sql fournit pas BackWPup.
En cas de changement d'hébergeur : Remplacer par exemple localhost/wordpress par www.visionduweb.eu (sans le https://) dans toutes les tables de données.
Les informations nécessaires pour établir la connexion sont regroupées dans le fichier wp-config.php de votre site WordPress.
Ce fichier se trouve à la racine de votre site, c’est lui qui permet la liaison avec la base de données.

UpdraftPlus

La solution UpdraftPlus permet de réinstaller le site sur le même serveur.
La solution UpdraftPlus n'est pas adaptée pour une migration.

Installer et activer le Widget UpdraftPlus.
UpdraftPlus se trouve dans Réglages > Sauvegardes UpdraftPlus.
Télécharger la sauvegarde depuis FTP : /wp-content/updraft

Sauvegarde effectuée le 24 avril 2019.

Sélectionnez tous les fichiers correspondant à votre sauvegarde.
Il s’agit des dossiers finissant par db.gz (la database), other.zip, themes.zip (vos thèmes), plugins.zip (la liste de vos plugins) et uploads.zip (votre bibliothèque de médias en quelques sortes, sachant que ce dossier peut-être découpé en plusieurs parties si votre site contient de nombreuses photos par exemple). 

Ajout d'une sauvegarde journalière des fichiers conservée en 2 exemplaires.
Ajout d'une sauvegarde de la base de données toutes les 12 heures conservées en 4 exemplaires. 

Le fichier .htaccess ne semble pas être restauré.

Source : https://wpformation.com/sauvegardez-votre-site-wordpress-avec-updraftplus/
Source : https://progresser-en-informatique.com/formation/wordpress/sauvegarder-site-wordpress/
Restauration :
Ajouter les archives sauvegardées dans le dossier /wp-content/updraft
Donner les archives à www-data et passer le chmod à 755.

Dans réglages / Sauvegardes UpdraftPlus
Une archive est maintenant disponible. Cliquer sur restaurer l'archive.

Penser à supprimer les dossier -old qui ont été générés.
Penser à récupérer le .htaccess original.

Migration de WordPress

Migration manuelle

Changer les préfixes de toutes les tables

Pourquoi changer le préfixe de toutes les tables

De nombreux administrateurs WordPress oublient de changer le préfixe de la base de données lors de l'installation de WordPress.
Cela permet aux pirates informatiques de planifier plus facilement une attaque massive en visant le préfixe par défaut wp_.
Certains diront qu'il est inutile de changer le préfixe puisque un pirate avisé saura retrouver le préfixe.
En laissant les préfixes des tables par défaut, cela facilite indirectement le travail de ces hackers.
En changeant le préfixe, de nombreuses attaques informatiques de base ne pourront plus fonctionner.
Autant prendre en compte cette configuration personnalisée.
Risques en laissant les préfixes par défaut :
Ajouts de contenu sur le site ou de commentaires de spams.
Altération ou destruction du contenu du site.
Site rendu indisponible.
Vol d'informations.

Depuis le fichier de configuration wp-config.php de WordPress

# Ce fichier devra toujours être modifié si le préfixe de la base de données est modifié.
# Éditer le fichier de configuration de WordPress :
sudo nano wp-config.php
# Modifier :
$table_prefix  = 'wp_new_';

Depuis la base de données

# Sauvegarder la base de données avant toutes modification.
# Remplacer le préfixe de la base de données avec la valeur renseignée précédemment : wp_new_
# Renommer toutes les tables WordPress avec la commande équivalent :
RENAME table 'wp_commentmeta' TO 'wp_new_commentmeta';
# Si la fonctionnalités multi-sites est activée, renommer les tables WordPress suivantes :
RENAME TABLE'wp_blogs' TO 'wp_new_blogs';
RENAME TABLE'wp_blog_versions' TO 'wp_new_blog_versions';
RENAME TABLE'wp_registration_log' TO 'wp_new_registration_log';
RENAME TABLE'wp_signups' TO 'wp_new_signups';
RENAME TABLE'wp_site' TO 'wp_new_site';
RENAME TABLE'wp_sitecategories' TO 'wp_new_sitecategories';
RENAME TABLE'wp_sitemeta' TO 'wp_new_sitemeta';
# Modifier les options :
# Cela affichera des résultats qu'il faudra modifier.
SELECT * FROM 'wp_new_options' WHERE 'option_name' LIKE '%wp_%';

# Modifier la table usermeta :
# Cela affichera des résultats qu'il faudra modifier.
SELECT * FROM 'wp_new_usermeta' WHERE 'meta_key' LIKE ‘%wp_%’

# La table option et usermeta peuvent être automatiquement mises à jour avec le script SQL suivant :
UPDATE 'wp_new_options' SET 'option_name'=REPLACE('option_name','wp_','wp_new_') WHERE 'option_name' LIKE '%wp_%';
UPDATE 'wp_new_usermeta' SET 'meta_key'=REPLACE('meta_key','wp_','wp_new_') WHERE 'meta_key' LIKE '%wp_%';
# Le widget duplicator possède une table à modifier également : duplicator_packages
# Tester le site.
Script pour générer les requêtes SQL pour changer le préfixe de toutes les tables d'un site WordPress
# Testé, amélioré par Visionduweb et approuvé !
# Afficher les requêtes a effectuer avec un script PHP.
# Le script suivant va générer les requêtes à lancer depuis MySQL / MariaDB ou PHPMyAdmin.
<?php
 // Ajouter l'adresse IP autorisée a consulter les informations de cette page :
 $ip_un_autorisee = "xx.xx.xxx.xx";
 $ip_deux_autorisee = "xx.xxx.xx.xx";
 //if($_SERVER['REMOTE_ADDR'] == "$ip_un_autorisee"){
 if("$ip_un_autorisee" == $_SERVER['REMOTE_ADDR'] || "$ip_deux_autorisee" == $_SERVER['REMOTE_ADDR']){
 // Affichage de la page ...
 // echo "Le contenu de la page va continuée d'être chargée.";
 } else {
 // Message d'erreur :
 echo "<h1 align='center'>Vous n'êtes pas autorisé a afficher cette page</h1>";
 // La commande exit arrête l'interprétation du code PHP pour le reste de la page.
 exit;
 }
 
 echo "<h1 align='center'>Changer les préfixes des tables de la base de données</h1>";
 
 /*---------------------------------------------------------------*/
 /*         Modifier le préfixe de toute les tables MySQL         */
 /*---------------------------------------------------------------*/
 // Serveur MySQL :
 $sql_serveur = "localhost";
 // Nom de la base de données :
 $sql_base = "xxxxxxxxxx";
 // Login de l'utilisateur de la base de données :
 $sql_login = "xxxxxxxxxx";
 // Mot de passe de l'utilisateur de la base de données :
 $sql_password = "xxxxxxxxxx";
 // Ancienne valeur du préfixe :
 $table_prefixe = "wp_";
 // Nouvelle valeur du préfixe :
 $new_prefixe = "wp_new_";
 
 // Connexion au serveur MySql :
 $lk = "mysql:host=$sql_serveur;dbname=$sql_base;port=3306;charset=utf8";
 try {
 $connexion_pdo = new PDO($lk, "$sql_login" , "$sql_password");
 echo "La connexion à la base de données a bien été établie.<br/>";
 }
 catch (PDOException $exception) {
 // Envoyer un mail en cas d'erreur de connexion à la base de données.
 // mail('administrateur@domaine.com', 'PDOException', $exception->getMessage());
 exit('Erreur de connexion à la base de données.');
 }
 
 $requete = "SHOW TABLES";
 $query = $connexion_pdo->prepare($requete);
 $query->execute();
 $all_tables = $query->fetchAll(PDO::FETCH_COLUMN);
 echo "Mettre à jour la base de données avec les commandes suivantes pour changer le préfixe des tables.<br/><br/>";
 echo "<h2>Se connecter à la base de données</h2>";
 echo "mysql -u $sql_login -p$sql_password -h $sql_serveur -D $sql_base<br/><br/>";
 echo "<h2>Renommer les tables</h2>";
 foreach ($all_tables as $table) {
     $new_table = str_replace($table_prefixe, $new_prefixe, $table);
     // Modifier l'ancien préfixe de la table par le nouveau prefixe.
     echo "RENAME TABLE $table TO $new_table;<br/>";
 }
 
 $result = [];
 foreach ($all_tables as $key => $table) {
     $requete = "DESCRIBE $table";
     $columns = $connexion_pdo->prepare($requete);
     $columns->execute();
     $columns = $columns->fetchAll(PDO::FETCH_COLUMN);
 
     foreach ($columns as $column) {
         $r = "SELECT * FROM'$table' WHERE'$column' LIKE '%$table_prefixe%'";
         $p = $connexion_pdo->prepare($r);
         $p->execute();
         $p = $p->fetchAll(PDO::FETCH_ASSOC);
 
         if (count($p) > 0) {
             $result[$table][$column] = $p;
         }
     }
 }
 
 echo "<h2>Mettre à jour les colonnes</h2>";
 foreach ($result as $table => $items) {
     echo "<h3>Table : $table</h3>";
     foreach ($items as $column => $item) {
         echo "<h4>Colonne : $column " . count($item) . " ligne(s)</h4>";
         foreach ($item as $structures) {
             $new_table     = str_replace($table_prefixe, $new_prefixe, $table);
             $new_structure = str_replace($table_prefixe, $new_prefixe, $structures[$column]);
  
             // UPDATE NEW_PREFIX_options SET option_name = replace(option_name, 'ANCIEN_PREFIX_user_roles', 'NEW_PREFIX_user_roles');
             echo "UPDATE $new_table SET $column = replace($column, '$structures[$column]', '$new_structure');<br/>";
         }
     }
 }
 
 echo "<h1 align='center'>Les commandes SQL pour changer les préfixes ont été générées</h1>";
 ?>

Changer les préfixes des tables dans la base de données avec un plugin

# Des plugins existent pour faire les modifications mais on préférera suivre les étapes manuelles présentées par après.
https://wordpress.org/plugins/brozzme-db-prefix-change/
Navigate to Plugins -> Add new section.
Type in search change-table-prefix , you will see a list of recommended plugins.
Click on Install Now & Activate Change Table Prefix plugin.
After that, navigate to Settings -> Change table prefix.
Select the following option, Would you like to use your own custom prefix and type a prefix you want to use in field, for example wpnew_.
You will get a message about successful prefix replacement.

Depuis PHPMyAdmin

En sélectionnant toutes les tables dans PHPMyAdmin, une option dans la liste des options déroulantes au bas de la page permet de modifier le préfixe des tables.
Il faudra malgré tout modifier manuellement les options et la table usermeta comme précédemment.

Vérifier les options générales de WordPress

Normalement, le nouveau site doit maintenant apparaître, sinon, faire les modifications depuis les options de WordPress.

Migration avec le Widget Duplicator

Installer et activer le widget Duplicator.
Sur certains serveurs la limitation pour PHP ne permet pas au plugin d'aboutir la sauvegarde.
Utiliser le widget UdraftPlus semble une alternative plus efficace.
Onglet Duplicator : CREATE NEW
Exclure les dossiers trop volumineux
- la sauvegarde précédente : /www/wp-content/updraft
- le dossier des fichiers medias : /www/wp-content/uploads/;
Onglet SETUP : Être sur PASS (Je n'ai pas vu cette proposition.) Suivant.
Onglet SCAN : Les étapes doivent être validées pour passer à la suite.
Onglet BUILD : Créer la duplication.
Préparer l'import !
En local, créer une nouvelle base de données.
Le fichier nommé “installer.php” et le fichier zip nommé "xxxx.archive.zip" à la racine de l'hébergement. Ne pas dézipper l'archive soit même.
Lancer l'installation avec installer.php
CONNECT AND REMOVE ALL DATA + Informations sur la nouvelle base de données.
Mettre à jour les données URL.
Tester l'installation.
Finalisation de l'installation :
- la mise à jour du .htaccess : Aller dans l'administration du site, onglet REGLAGES > PERMALIENS > puis "enregistrer les modifications" à nouveau.
- la vérification de chaque page et de chaque article du site pour voir si tout est fonctionnel.
- supprimer les fichiers suivants situés à la racine votre hébergement ou de votre dossier : installer-data.sql / installer-log.txt / installer.php

Source : https://wpformation.com/migrer-wordpress-duplicator/

Permaliens

Erreur 404

Les permaliens fonctionnent avec la syntaxe suivante :
/blog/?p=123
/blog/index.php/nom-du-post
Mais plus avec :
/blog/nom-du-post
Vérifier que le module mode rewrite soit bien activé.
Sinon :
Vérifier la configuration du fichier VirtualHost : 
cd /etc/apache2/sites-available/
nano lesite.conf
Remplacer :
AllowOverride None
par
AllowOverride All

Bridge

Intégration de Moodle

https://edwiser.org/bridge/

Sécurité

Configurer le fichier .htaccess de Wordpress

Protéger l'interface d'administration

# Protéger l'administration avec une adresse IP unique autorisée.
<Files wp-login.php>
order deny,allow
Deny from all
Allow from xx.xxx.xxx.xxx
</Files>

Protéger le fichier wp-config.php

# Protéger le fichier de configuration.
<files wp-config.php>
order allow,deny
deny from all
</files>

Changement de domaine

Suite à un changement de nom de domaine, vérifier les informations présentes dans le fichier .htaccess concernant la présence du bon nom de domaine a utiliser.

Créer une redirection des anciens domaines vers le nouveau domaine

# Si nécessaire, décommenter l'option suivante :
# Options +FollowSymLinks
RewriteEngine on
RewriteRule ^(.*)$ http://www.newsite.com/$1 [R=301,L]
# Sources complémentaires :
Rediriger le domaine http://visionduweb.com vers http://www.visionduweb.com
Source : http://nouri-tawfik.com/blog/reecriture-durls-wordpress-sans-www/

Passer son domaine en https

# Par défaut, si le fichier .htaccess n'existe pas, le créer.

# BEGIN WordPress
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
# END WordPress
# Rediriger vers https://domaine.ext
# Redirection vers HTTPS 
RewriteCond %{SERVER_PORT} ^80$ [OR]
RewriteCond %{HTTPS} =off
RewriteRule ^(.*)$ https://monsite.com/$1 [R=301,L]

# Redirection du www vers non-www en HTTPS
RewriteCond %{HTTP_HOST} ^www\.monsite\.com [NC]
RewriteRule ^(.*)$ https://monsite.com/$1 [R=301,L]
# Rediriger vers https://www.domaine.ext
# Redirection vers HTTPS 
RewriteCond %{SERVER_PORT} ^80$ [OR]
RewriteCond %{HTTPS} =off
RewriteRule ^(.*)$ https://www.monsite.com/$1 [R=301,L]

# Redirection du non-www vers www en HTTPS
RewriteCond %{HTTP_HOST} ^monsite.com [NC]
RewriteRule ^(.*)$ https://www.monsite.com/$1 [R=301,L]
Source : https://wpmarmite.com/wordpress-https/#extensions-https
Source : https://wpmarmite.com/htaccess-wordpress/

Protéger le répertoire /wp-content/uploads/ pour empêcher l'exécution de fichier .php

# Un fichier .htaccess peut être ajouté dans le répertoire /wp-content/uploads/.
# Ce code peut être utilisé pour bloquer l'exécution d'un fichier potentiellement malveillant ajouté dans ce répertoire.
<FilesMatch “\.(?:php)$”>
Order allow,deny
Deny from all
</FilesMatch>

Configurer les permissions d'accès aux fichiers

# Régler les permissions d'accès aux fichiers de WordPress de la façon suivante :
Les permissions doivent être réglées sur 0755 pour les dossiers
Les permissions doivent être réglées sur 0644 pour les fichiers

Widget pour la sécurité

iThemes Security

# Anciennement Better WP Security :
https://fr.wordpress.org/plugins/better-wp-security/

Protection contre les attaques par brute force

Wordfence security, Login LockIn, Login security solution, BruteProtect (maintenant intégré à Jetpack), BulletProof Security, SecuPress
https://wordpress.org/plugins/wordfence/
https://wordpress.org/plugins/login-lockdown/
https://wordpress.org/plugins/login-security-solution/
https://wordpress.org/plugins/bruteprotect/

Déplacer la page de connexion

WPS Hide Login, SF Move Login ou SecuPress
https://wordpress.org/plugins/wps-hide-login/
https://wordpress.org/plugins/sf-move-login/
https://secupress.me/fr/

Plugin tout en un qui incluent de nombreuses protections

SecuPress (français), iThemes Security, Wordfence security.
https://secupress.me/fr
https://wordpress.org/plugins/better-wp-security/
https://wordpress.org/plugins/wordfence/

Double authentification pour la connexion

SecuPress, Google Authenticator, Duo Two-Factor Authentication.
https://secupress.me/fr
https://wordpress.org/plugins/miniorange-2-factor-authentication/
https://wordpress.org/plugins/duo-wordpress/

Changer le mot de passe administrateur de WordPress

Source : https://www.easytutoriel.com/reinitialiser-mot-de-passe-wordpress.html
Source : https://codex.wordpress.org/fr:R%C3%A9initialisation_de_votre_mot_de_passe

Exploit scanner

Exploit Scanner pour WordPress : https://wordpress.org/plugins/exploit-scanner/

Changer le template de WordPress

Simple Shop Free

Simple Shop Free : https://slocumthemes.com/wordpress-themes/simple-shop-free/

Themeforest

Themeforest : https://themeforest.net

Site de rencontre

Les thèmes WordPress pour créer un site de rencontre :
Kleo
LoveStory
Love Hearts
Dating Agency
Gleam
Sweet Date
Les plugins WordPress pour créer un site de rencontre :
BuddyPress
Rencontre
Ultimate Member

SEO

Script to footer : met les script javascript dans le footer des pages, pour améliorer la vitesse de chargement des pages. Il a l'air de fonctionner correctement.
Better WordPress Minify : supprime les caractères 'inutiles' des javascripts et css.
Autoptimize : assemble tous les css et javascripts dans un seul fichier.
Gzip Ninja : activer la compression des données.
Activer le plugin super cache.

Scripts WordPress pour le SEO

https://fr.wordpress.org/plugins/wordpress-seo/
https://fr.wordpress.org/plugins/all-in-one-seo-pack/
https://fr.wordpress.org/plugins/all-in-one-schemaorg-rich-snippets/

Bibliographie

Ok-ko.png Trucs et astuces pour WordPress : http://memo-web.fr/memo-membre-1-122.php
Ok-ko.png Nouveautés avec la version de WordPress 5.2 : https://www.developpez.net/forums/d1970079/php/scripts/cms/wordpress/wordpress-5-2-jaco-debarque-possibilite-voir-l-etat-sante-site/
Ok.png Requêtes SQL, utiliser WordPress : https://wpformation.com/requetes-sql-utiles-wordpress/
Ok.png Le guide complet pour optimiser vos images sur WordPress : https://audreytips.com/guide-complet-optimiser-images-wordpress/

NAVIGATION

PARTICIPER ET PARTAGER

Vous êtes sur le wiki de Vision du Web.
De nombreuses pages sont partagées sur ce wiki.
Les pages présentées sur le wiki évoluent tous les jours.
Certaines recherches sont peu abouties et incluent des erreurs.
Pour participer sur le wiki, créer un compte utilisateur en haut à droite.
La recherche interne du wiki permet de trouver le contenu qui vous intéresse.
Les informations présentes sur ce wiki sont issues d'une recherche personnelle.
Identifiez-vous pour poser vos questions sur la page de discussion de VisionDuWeb.
Améliorer le contenu des pages en faisant des propositions depuis l'onglet discussion.
Les informations du wiki ne doivent pas servir à nuire à autrui ou à un système informatique.
Pour participer sur le forum, créer un compte utilisateur depuis le forum. Aller sur le Forum.

VALORISER LE WIKI

Valoriser le contenu partagé sur le wiki avec un don en monnaie numérique :
AEON - Bitcoins - Bitcoins Cash - Bitcoins Gold - Bitcore - Blackcoins - Basic Attention Token - Bytecoins - Clams - Dash - Monero - Dogecoins - Ğ1 - Ethereum - Ethereum Classique - Litecoins - Potcoins - Solarcoins - Zcash

OBTENIR DE LA MONNAIE NUMERIQUE

Obtenir gratuitement de la monnaie numérique :
Gagner des Altcoins - Miner des Altcoins.