Table des matières
Single Wp Multi Tld (Top Level Domain)
Date de création : 2021/07/13 17:14
Bon imaginons : vous avez un site wordpress, magnifique bien-sur, et vous aimeriez bien avoir une deuxième extension de nom de domain pour étendre votre visibilité.
Genre vous avez monSuperSite.ch et vous voulez ajouter monSuperSite.com
Ou bien vous avez monSuperSite.ch et vous voulez ajouter monSuperSite.fr
Le problème c'est que vous devez faire deux sites identiques ou un multi-site mais il faudra faire tout les pages en double.
Alors ce petit tutoriel est pour vous !
Nous allons voir ici comment avoir une, deux, trois enfin plusieurs extensions de domaines le tout avec :
- un seul wordpress
- un seul dossier thèmes
- un seul dossier plugins
- un seul dossier média
- un seul endroit pour gérer votre site.
En fait un seul site identique en tout point mais avec plusieurs domaines !
Pré-requis
- du courage
- du café
- des lunettes bien propres
- et du temps… pour lire tout le blabla qui suit…
Variable $options
Bon on va devoir aller un peu dans les entrailles de la bête.
Mais c'est juste pour comprendre, si vous voulez voir directement le résultat, c'est plus bas
Quand vous installez Wordpress à la deuxième page vous renseignez la basse de donnée, puis à la quatrième page les informations sur votre site.
On ne parle pas de l'extension, pourtant elle est bien inscrite dans l'adresse de votre site que vous pouvez voir dans la page Réglages.
Wordpress ne vous l'a pas demandez mais il l'a inscrit dans la base de donnée dans la table Options aux lignes siteurl et home, respectivement la première et la deuxième ligne de la table.
A l'installation wordpress a pris l'adresse de l'host qui l'a appelé et l'a écrite dans un coin pour pouvoir la changer dans la variable Global $options plus tard et savoir ou il se trouve dans le monde numérique de l'internet.
Quand vous appelez une simple page, Wordpress a toute une procédure,
- il charge en premier wp-config.php pour récupérer les informations de connexion de la BDD
- puis il charge le fichier wp-settings.php pour initialiser les variables globales
- puis il avance jusqu'à wp-admin/options.php et la, on récupère depuis la table sql options, grâce à la variable $wpdb qui contient déjà les informations de connexion, les data pour les charger dans la variable $option.
$options = $wpdb->get_results( "SELECT * FROM $wpdb->options ORDER BY option_name" );
Ok ici tout est réglé, les données sont chargées et Worpdress à toutes ces informations dans la variable globale $options.
Donc il nous suffit de changer la valeur de home et siteurl dans la variable globale $options et le tour est joué.
nous allons y venir mais avant il faut voir autre chose pour tout comprendre.
Hooks
Non je ne vais pas vous parler de peter pan et le capitaine crochet !
Les Hooks ou crochets sont un moyen pour un morceau de code d'interagir/modifier un autre morceau de code à des endroits spécifiques et prédéfinis.
Il existe deux types de crochets : les actions et les filtres .
Pour utiliser l'un ou l'autre, vous devez écrire une fonction personnalisée appelée Callback, puis l'enregistrer avec un hook WordPress pour une action ou un filtre spécifique.
Nous allons nous attarder sont les filtres.
Les filtres vous donnent la possibilité de modifier les données pendant l'exécution de WordPress Core, des plugins et des thèmes.
Les fonctions de rappel pour les filtres accepteront une variable, la modifieront et la retourneront.
Ils sont censés fonctionner de manière isolée et ne devraient jamais avoir d' effets secondaires tels qu'affecter les variables globales et la sortie bon là il doit y avoir une erreur de frappe… Les filtres s'attendent à ce que quelque chose leur soit renvoyé.
Donc là c'est tout bon pour nous il suffit de trouver le bon filtre de l'appliquer et le tour est encore une fois joué.
Résumé
Donc pour résumer Wordpress charge une variable globale $options qui contient tous les paramètres du site et nous pouvons modifier des paramètres avec un filtres.
Pour ajouter un filtre on fait
add_filter( string $tag, callable $function_to_add, int $priority = 10, int $accepted_args = 1 );
Résultat
Avec le code suivant nous allons modifier les valeurs de siteurl et Home avant qu'elles ne soient affichées
add_filter( 'pre_option_siteurl', 'set_current_host' ); add_filter( 'pre_option_home', 'set_current_host' ); function set_current_host() { return 'http://' . $_SERVER['HTTP_HOST']; }
add_filter | Ajoute un filtre |
pre_options_{$option} | Filtre la valeur d'une option existante avant qu'elle ne soit récupérée. |
siteurl/home | les key des valeurs que nous voulons modifier |
set_current_host | le Callback |
Dans le callback nous renvoyons directement le contenu de l'en-tête Host: de la requête courante, si elle existe avec un return.
Donc si le host est monsite.com les variables siteurl et home vont être changées après avoir été récupèrées dans la base de données.
Pour se faire il faut mettre se bout de code à la fin du fichier wp-config.php en dessous de la ligne :
require_once ABSPATH . 'wp-settings.php';
Pour qu'il charge en premier les informations dans la base SQL et après nous les modifions.
Voila on y arrive le tour est enfin joué, maintenant peut importe votre adresse elle sera changé dynamiquement dans les réglages de Worpdress au chargement de la page et vous pouvez avoir un site avec deux extensions ou TLD (Top Level Domain) comme sur mon site:
Il n'y a qu'un site mais j'ai deux nom de domaine ch/fr donc la maintenance est très rapide, thème et plugins fonctionnent pour les deux domaines.
Problème rencontré
Une fois cette modification effectué je me suis retrouvé avec une erreur :
Access-Control-Allow-Origin
et ma console qui à explosé.
Heureusement il y a deux solutions:
- Une extension bien pratique : HTTP Headers, pas trop de réglages à faire pour fonctionner
- Ajouter :
header("Access-Control-Allow-Origin: *");
dans le fichier function.php de votre thème pour ne pas surcharger votre site de plugins.
Il est aussi possible de la mettre dans une class :
function add_cors_http_header(){ header("Access-Control-Allow-Origin: *"); } add_action('init','add_cors_http_header');
Cette page a pour source partielle ou intégrale la ou les pages suivantes:
Page dans la catégorie: