web-dev-qa-db-fra.com

URL relatives dans Wordpress

J'ai toujours trouvé frustrant dans Wordpress que des images, des fichiers, des liens, etc. soient insérés dans WordPress avec une URL absolue au lieu d'une URL relative. Une URL relative est beaucoup plus pratique pour changer de nom de domaine, entre http et https, etc. Aujourd'hui, j'ai découvert que si vous définissez WP_CONTENT_URL avec une URL relative, vous utiliserez l'URL relative pour src au lieu d'URL absolue. . Juste ce que j'ai toujours voulu! Mais la documentation officielle de Wordpress indique que vous devez utiliser un URI complet si vous définissez WP_CONTENT_URL.

Le codex Wordpress dit :

Définissez WP_CONTENT_URL sur l'URI complet de ce répertoire (sans barre oblique , Après), par exemple.

define( 'WP_CONTENT_URL', 'http://example/blog/wp-content');

Tout semble bien fonctionner lorsque j'utilise une URL relative, par exemple.

define( 'WP_CONTENT_URL', '/my-content-folder');

Mais y a-t-il un problème avec l'utilisation d'un URI relatif? Je pense simplement qu'il doit y avoir une raison pour Wordpress affirmant qu'il devrait être défini avec un URI complet. 

77
AidanCurran

Je pense que c'est le genre de question que seul un développeur principal pourrait/devrait répondre. J'ai effectué des recherches et trouvé le ticket principal n ° 17048: les URL fournies au navigateur devraient être relatives à la racine . Où nous pouvons trouver les raisons expliquées par Andrew Nacin, développeur principal. Il a également un lien vers ce fil [wp-hackers] }. Sur ces deux liens, ce sont les citations clés expliquant pourquoi WP n'utilise pas d'URL relatives:

Billet de base:

  • Les URL relatives à la racine ne sont pas vraiment appropriées. /path/ n'est peut-être pas WordPress, il se peut qu'il soit en dehors de l'installation. Donc, vraiment, ce n'est pas très différent d'une URL absolue.

  • Les URL relatives rendent également beaucoup plus difficile l'exécution de transformations lorsque l'installation est déplacée. La recherche-remplacement va être nécessaire dans la plupart des situations, et avoir une URL absolue est ironiquement plus portable pour ces raisons.

  • les URL absolues sont nécessaires dans de nombreux autres endroits. Avoir besoin de les ajouter conditionnellement va ajouter au traitement, ainsi que présenter des bugs potentiels (et des incompatibilités avec les plugins).

fil [wp-hackers]

  • Par rapport à quoi, je ne suis pas sûr, car WordPress est souvent dans un sous-répertoire, ce qui signifie que nous allons toujours besoin de traiter le contenu pour ensuite l'ajouter au reste du chemin. Ce introduit des frais généraux.

  • N'oubliez pas qu'il existe deux types d'URL relatifs, avec et sans le slash principal. Les deux ont des mises en garde qui rendent cela impossible à correctement mettre en place.

  • WordPress devrait (et fait) stocker des URL absolues. Ce ne nécessite aucun traitement préalable du contenu, aucune surcharge, aucune ambiguïté. Si vous besoin de déménager, c’est une recherche globale dans la base de données.


Et, sur une note personnelle, j'ai trouvé plus d'une fois un thème et des plugins mal codés qui se cassent tout simplement lorsque WP_CONTENT_URL est défini.
Ils ne savent pas ceci peut être défini et suppose que cela est vrai: WP.URL/wp-content/WhatEver, et ce n'est pas toujours le cas. Et quelque chose va casser en cours de route.


Le plugin URL relatives (lié dans la réponse de edse } _ _) applique la fonction wp_make_link_relative dans un série de des filtres dans le hook d’action template_redirect . C'est un code assez simple et semble une bonne option.

52
brasofilo
<?php wp_make_link_relative( $link ) ?>

Convertissez les chemins d’URL complets en chemins relatifs. 

Supprime les protocoles http ou https et le domaine. Conserve le chemin '/' au début, ce n'est donc pas un vrai lien relatif, mais à partir de la base racine Web. 

Référence: Wordpress Codex

10
davidcondrey

Je suis d'accord avec Rup. Je suppose que la raison principale est d'éviter toute confusion sur les chemins relatifs. Je pense que wordpress peut fonctionner à partir de zéro avec des chemins relatifs, mais le problème peut venir de l’utilisation de plusieurs plugins, de la configuration du thème, etc. 

J'ai déjà utilisé ce plugin pour les chemins relatifs, lorsque je testais des serveurs:

URL relatives relatives
Convertit toutes les URL en URL relatives à la racine pour héberger le même site sur plusieurs adresses IP, pour une migration de production plus facile et pour de meilleurs tests des appareils mobiles.

5
danielsalare

Je l'ai résolu dans mon site en le rendant dans functions.php

add_action("template_redirect", "start_buffer");
add_action("shutdown", "end_buffer", 999);

function filter_buffer($buffer) {
    $buffer = replace_insecure_links($buffer);
    return $buffer;
}
function start_buffer(){
    ob_start("filter_buffer");
}

function end_buffer(){
    if (ob_get_length()) ob_end_flush();
}

function replace_insecure_links($str) {

   $str = str_replace ( array("http://www.yoursite.com/", "https://www.yoursite.com/") , array("/", "/"), $str);

   return apply_filters("rsssl_fixer_output", $str);

}

J'ai pris une partie d'un plugin, le découper en morceaux et le rendre . Il a remplacé TOUS les liens de mon site (menus, css, scripts, etc.) et tout fonctionnait correctement.

0
ikebastuz