{"id":1909,"date":"2012-02-11T19:35:18","date_gmt":"2012-02-11T18:35:18","guid":{"rendered":"https:\/\/www.creativejuiz.fr\/blog\/?p=1909"},"modified":"2015-01-18T16:15:24","modified_gmt":"2015-01-18T15:15:24","slug":"wordpress-transformer-liens-absolus-en-liens-relatifs","status":"publish","type":"post","link":"https:\/\/www.creativejuiz.fr\/blog\/wordpress\/wordpress-transformer-liens-absolus-en-liens-relatifs","title":{"rendered":"WordPress &#8211; Transformer les liens absolus en liens relatifs"},"content":{"rendered":"<p>WordPress propose un \u00e9diteur <abbr title=\"What You See Is What You Get - Ce que vous soyez est ce que vous obtenez\" lang=\"en\">WYSIWYG<\/abbr> plut\u00f4t riche et bien fichu. La possibilit\u00e9 d&rsquo;ins\u00e9rer un contenu riche (lien, image, etc.) est \u00e0 port\u00e9e de tout le monde. Nous allons nous concentrer sur les chemins des liens et des images pour voir comment travaille cet \u00e9diteur.<!--more--><\/p>\n<p style=\"clear:left;\" class=\"message important warning\">Note : l&rsquo;<a href=\"http:\/\/www.deluxeblogtips.com\/2012\/06\/relative-urls.html\" hreflang=\"en\" title=\"Article de Deluxe Tips sur les URL absolue\">article sur Deluxe Tips<\/a> apporte une solution qui semble bien plus compl\u00e8te \u00e0 ce \u00ab\u00a0probl\u00e8me\u00a0\u00bb d&rsquo;url absolue. Je vous invite \u00e0 le consulter. Je ne supprime pas mon propre article pour archive, mais consid\u00e9rez-le comme obsol\u00e8te.<\/p>\n<h2>Contenu ins\u00e9r\u00e9 par l&rsquo;\u00e9diteur<\/h2>\n<p>WordPress dispose de deux boutons pour ins\u00e9rer m\u00e9dias et liens. Le bouton des m\u00e9dias <img decoding=\"async\" class=\"noborder alignnone size-full wp-image-1913\" title=\"\" src=\"https:\/\/www.creativejuiz.fr\/blog\/wp-content\/uploads\/2012\/02\/inserer-media.png\" alt=\"\" width=\"111\" height=\"18\" \/> situ\u00e9 au dessus du cadre de l&rsquo;\u00e9diteur permet l&rsquo;insertion d&rsquo;une image, par exemple.<br \/>\nSi l&rsquo;on regarde l&rsquo;attribut <code>src<\/code> du code g\u00e9n\u00e9r\u00e9, voici ce qui ressort (code simplifi\u00e9) :<\/p>\n<pre class=\"code\"><code class=\"html boc-nogutter boc-nocontrols\">&lt;img src=\"http:\/\/yourawesomewebsite.us\/wp-content\/uploads\/2012\/02\/image.png\" alt=\"\" \/&gt;<\/code><\/pre>\n<p>Pour les liens, le bouton\u00a0<img decoding=\"async\" class=\"alignnone size-full wp-image-1914\" title=\"\" src=\"https:\/\/www.creativejuiz.fr\/blog\/wp-content\/uploads\/2012\/02\/lien-outil.png\" alt=\"\" width=\"26\" height=\"24\" \/> situ\u00e9 sur la premi\u00e8re ligne des outils de l&rsquo;\u00e9diteur permet leur insertion.<\/p>\n<p class=\"center\"><img decoding=\"async\" class=\"aligncenter size-full wp-image-1915\" title=\"inserer-un-lien\" src=\"https:\/\/www.creativejuiz.fr\/blog\/wp-content\/uploads\/2012\/02\/inserer-un-lien.jpg\" alt=\"\" width=\"380\" height=\"367\" srcset=\"https:\/\/www.creativejuiz.fr\/blog\/wp-content\/uploads\/2012\/02\/inserer-un-lien.jpg 380w, https:\/\/www.creativejuiz.fr\/blog\/wp-content\/uploads\/2012\/02\/inserer-un-lien-300x289.jpg 300w\" sizes=\"(max-width: 380px) 100vw, 380px\" \/><\/p>\n<p>En utilisant le nouvel outil de liens internes, il est possible de faire des liens vers d&rsquo;autres ressources de son propre site web (page et article).<br \/>\nCes liens ont un attribut <code>href<\/code> absolu, eux aussi.<\/p>\n<pre class=\"code\"><code class=\"html boc-nogutter boc-nocontrols\">&lt;a href=\"http:\/\/yourawesomewebsite.us\/a-propos\"&gt;la page \u00e0 propos&lt;\/a&gt;<\/code><\/pre>\n<h2>Inconv\u00e9nient<\/h2>\n<p>Si jamais il vous prenait l&rsquo;envie de d\u00e9m\u00e9nager votre blog sur un nouveau domaine ou sous-domaine, vous seriez bien emb\u00eat\u00e9s !<br \/>\nEn effet, il vous faudrait cr\u00e9er une petite moulinette (requ\u00eate SQL par exemple) pour intervenir sur les bases de donn\u00e9es de WordPress, ou vous retaper les articles \u00e0 la main.<\/p>\n<p class=\"message\">Il y a une l\u00e9gende urbaine chez certains experts en r\u00e9f\u00e9rencement qui dit que les liens internes relatifs sont \u00e0 privil\u00e9gier aux liens absolus. Mais le seul <a href=\"http:\/\/twikito.com\/\" title=\"Matthieu Bu\u00e9 - Aka Twikito\">expert SEO<\/a> que j&rsquo;ai consult\u00e9 m&rsquo;a dit <cite>\u00ab\u00a0tant qu&rsquo;on arrive sur la bonne page\u00a0\u00bb<\/cite>. L\u00e9gende, ok, faites-en ce que vous voulez !<\/p>\n<h2>Solution ?<\/h2>\n<p>Cela n&rsquo;a rien d&rsquo;absolu, mais mes premiers essais sont plut\u00f4t concluants :<\/p>\n<p>Dans <code>functions.php<\/code> glisser ce code :<\/p>\n<pre class=\"code\"><code class=\"php\">if (!function_exists('juiz_absolute_2_relative')) {\r\n   function juiz_absolute_2_relative($post_ID, $post) {\r\n      \/\/ ScreenFeed - suggestion (http:\/\/screenfeed.fr)\r\n      if ( defined( 'DOING_AUTOSAVE' ) &amp;&amp; DOING_AUTOSAVE )\r\n         return $post-&gt;ID;\r\n\r\n      $nonce_action = 'update-' . $post-&gt;post_type . '_' . $post-&gt;ID;\r\n      if ( !isset($_POST[ '_wpnonce' ]) || !wp_verify_nonce( $_POST[ '_wpnonce' ], $nonce_action ) )\r\n         return $post-&gt;ID;\r\n\r\n      $post_type = get_post_type_object( $post-&gt;post_type );\r\n      if ( !current_user_can( $post_type-&gt;cap-&gt;edit_post, $post-&gt;ID ) )\r\n         return $post-&gt;ID;\r\n\r\n      \/\/ CreativeJuiz - replace absolute by relative link\r\n      $siteurl = get_bloginfo('url');\r\n\r\n      \/\/ if we are in sub folder installation (\/!\\) be carefull (\/!\\)\r\n      $after_domain = preg_replace('#http(s)?:\/\/(.+)\/(.+)#', '$3', $siteurl);\r\n\r\n      \/\/ absolute links to relative links\r\n      $new_content = preg_replace('#href=\"'.$siteurl.'#', 'href=\"\/'.$after_domain, $post-&gt;post_content);\r\n\r\n      \/\/absolute src to relative src\r\n      $new_content = preg_replace('#src=\"'.$siteurl.'#', 'src=\"\/'.$after_domain, $new_content);\r\n      \r\n      \/\/ save the post\r\n      global $wpdb;\r\n      $wpdb-&gt;update( $wpdb-&gt;posts, array( 'post_content' =&gt; $new_content ), array( 'ID' =&gt; $post-&gt;ID ) );\r\n   }\r\n   add_action( 'save_post', 'juiz_absolute_2_relative', 10, 2 );\r\n}<\/code><\/pre>\n<p>Une fois ce code enregistr\u00e9 dans <code>functions.php<\/code>, lors d&rsquo;un enregistrement d&rsquo;un post, le script v\u00e9rifiera s&rsquo;il croise une valeur absolue des attributs <code>src<\/code> ou <code>href<\/code> et les passera en relative (\u00e0 condition qu&rsquo;il reconnaisse la base de l&rsquo;URL de votre site WordPress).<\/p>\n<p class=\"message important\">Attention : cette technique fonctionne dans le cas d&rsquo;un blog en sous-dossier (comme ici : http:\/\/creativejuiz.fr\/blog\/), mais n&rsquo;a aucun int\u00e9r\u00eat puisqu&rsquo;en cas de d\u00e9m\u00e9nagement du blog, les URLs conserv\u00e9es auront cette forme : <code>\/blog\/wp-content<\/code>[&hellip;]<\/p>\n<p>Le code d\u00e9tecte la valeur de <code>bloginfo('url')<\/code> et prend en compte une installation dans un dossier (avec la nuance pr\u00e9c\u00e9demment cit\u00e9e) ou en sous-domaine, ainsi qu&rsquo;une installation plus classique bien \u00e9videmment.<\/p>\n<p class=\"message\">Ce script ne modifie pas les URL d\u00e9j\u00e0 \u00e9crites dans les articles existants.<\/p>\n<h2>Une alternative ?<\/h2>\n<p>Il existe un plugin qui vous permet d&rsquo;effectuer un changement d&rsquo;URL de base pour votre blog.<br \/>\nCe plugin une fois activ\u00e9 vous offre deux champs texte \u00e0 renseigner avec : l&rsquo;ancienne URL, la nouvelle URL.<br \/>\nIl se charge de remplacer dans la base de donn\u00e9es toutes les occurences de l&rsquo;ancienne par la nouvelle URL.<br \/>\n<strong>Ce plugin ne vous permet pas d&rsquo;avoir des liens relatifs !<\/strong><\/p>\n<p class=\"center\"><a href=\"http:\/\/wordpress.org\/extend\/plugins\/velvet-blues-update-urls\/\" class=\"download\" hreflang=\"en\" lang=\"en\">WordPress.org<br \/>Plugin<br \/>Velvet blues update<\/a><\/p>\n<p class=\"message important warning\">Note : l&rsquo;<a href=\"http:\/\/www.deluxeblogtips.com\/2012\/06\/relative-urls.html\" hreflang=\"en\" title=\"Article de Deluxe Tips sur les URL absolue\">article sur Deluxe Tips<\/a> apporte une solution qui semble bien plus compl\u00e8te \u00e0 ce \u00ab\u00a0probl\u00e8me\u00a0\u00bb d&rsquo;url absolue. Je vous invite \u00e0 le consulter. Je ne supprime pas mon propre article pour archive, mais consid\u00e9rez-le comme obsol\u00e8te.<\/p>\n<h2>Bref&hellip;<\/h2>\n<p>N&rsquo;h\u00e9sitez pas \u00e0 me faire vos retours si jamais vous rencontrez un bogue, difficile d&rsquo;avoir toutes les exceptions en t\u00eate \ud83d\ude09<\/p>\n<div class=\"sources\">\n<h2>Liens utiles<\/h2>\n<ul>\n<li><a href=\"http:\/\/www.geekpress.fr\/hooks-wordpress\/save-post\/\">GeekPress &#8211; Hook <code>save_post<\/code><\/a><\/li>\n<li><a href=\"http:\/\/screenfeed.fr\/blog\">ScreenFeed &#8211; blog<\/a><\/li>\n<li><a href=\"http:\/\/codex.wordpress.org\/Moving_WordPress\" lang=\"en\" hreflang=\"en\">Moving WordPress<\/a><\/li>\n<\/ul>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>WordPress propose un \u00e9diteur WYSIWYG plut\u00f4t riche et bien fichu. La possibilit\u00e9 d&rsquo;ins\u00e9rer un contenu riche (lien, image, etc.) est \u00e0 port\u00e9e de tout le monde. Nous allons nous concentrer sur les chemins des liens et des images pour voir comment travaille cet \u00e9diteur.<\/p>\n","protected":false},"author":4,"featured_media":1964,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_bluesky_dont_syndicate":"","_bluesky_syndication_accounts":"","_bluesky_syndication_text":"","footnotes":""},"categories":[13],"tags":[437,228,434,412,438,684],"coauthors":[597],"class_list":["post-1909","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-wordpress","tag-add_action","tag-astuce","tag-hook","tag-liens-2","tag-save_post","tag-wordpress"],"acf":[],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/www.creativejuiz.fr\/blog\/wp-json\/wp\/v2\/posts\/1909","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.creativejuiz.fr\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.creativejuiz.fr\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.creativejuiz.fr\/blog\/wp-json\/wp\/v2\/users\/4"}],"replies":[{"embeddable":true,"href":"https:\/\/www.creativejuiz.fr\/blog\/wp-json\/wp\/v2\/comments?post=1909"}],"version-history":[{"count":0,"href":"https:\/\/www.creativejuiz.fr\/blog\/wp-json\/wp\/v2\/posts\/1909\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.creativejuiz.fr\/blog\/wp-json\/wp\/v2\/media\/1964"}],"wp:attachment":[{"href":"https:\/\/www.creativejuiz.fr\/blog\/wp-json\/wp\/v2\/media?parent=1909"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.creativejuiz.fr\/blog\/wp-json\/wp\/v2\/categories?post=1909"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.creativejuiz.fr\/blog\/wp-json\/wp\/v2\/tags?post=1909"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.creativejuiz.fr\/blog\/wp-json\/wp\/v2\/coauthors?post=1909"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}