Url relativas en Wordpress


Siempre he encontrado frustrante en Wordpress que las imágenes, archivos, enlaces, etc. se insertan en WordPress con una URL absoluta en lugar de una URL relativa. Una url relativa es mucho más conveniente para cambiar nombres de dominio, cambiar entre http y https, etc. Hoy descubrí que si define WP_CONTENT_URL con una url relativa, entonces cuando inserta archivos en las publicaciones, usan la url relativa para el src en lugar de la url absoluta. Justo lo que siempre he querido! Pero el oficial de Wordpress la documentación dice que debe usar un URI completo si está definiendo WP_CONTENT_URL.

El codex de Wordpress dice:

Establezca WP_CONTENT_URL en el URI completo de este directorio (sin final slash), por ejemplo

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

Todo parece funcionar bien cuando uso una URL relativa, por ejemplo,

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

Pero, ¿hay algún problema con el uso de un URI relativo? Solo estoy pensando que debe haber una razón para Wordpress indicando que debe ser definido con un URI completo.

 73
Author: AidanCurran, 2013-06-19

7 answers

Creo que este es el tipo de pregunta que solo un desarrollador principal podría/debería responder. He investigado y encontrado el ticket principal #17048: Las URL entregadas al navegador deben ser relativas a la raíz. Donde podemos encontrar las razones explicadas por Andrew Nacin, desarrollador principal. También enlaza a este hilo [wp-hackers] . En ambos enlaces, estas son las citas clave de por qué WP no usa URLs relativas:

Ticket principal:

  • Las URL relativas a la raíz no son realmente apropiado. /path/ podría no ser WordPress, podría estar fuera de la instalación. Así que realmente no es muy diferente a una URL absoluta.

  • Cualquier URL relativa también hace que sea significativamente más difícil realizar transformaciones cuando se mueve la instalación. El find-replace va a ser necesario en la mayoría de las situaciones, y tener una URL absoluta es irónicamente más portátil por esas razones.

  • URLs absolutas son necesarias en muchos otros lugares. Necesidad de añadir estos en condicionalmente se sumará al procesamiento, así como introducir errores potenciales (e incompatibilidades con plugins).

[wp-hackers] hilo

  • En relación con lo que, no estoy seguro, como WordPress es a menudo en un subdirectorio, lo que significa que vamos a siempre necesita procesar el contenido para luego agregar el resto de la ruta. Este introduce gastos generales.

  • Tenga en cuenta que hay dos tipos de URLs relativas, con y sin el barra principal. Ambos tienen advertencias que hacen que esto sea imposible implementar.

  • WordPress debería (y lo hace) almacenar URLs absolutas. Este no requiere pre-procesamiento de contenido, sin sobrecarga, sin ambigüedad. Si necesidad de reubicar, es una búsqueda global-reemplazar en la base de datos.


Y, en una nota personal, más de una vez he encontrado tema y plugins mal codificados que simplemente se rompen cuando se define WP_CONTENT_URL.
Le no sé esto se puede establecer y asumir que esto es cierto: WP.URL/wp-content / WhatEver, y no siempre es el caso. Y algo se romperá en el camino.


El plugin Url relativas (enlazado en edse's Answer ), aplica la función wp_make_link_relative en una serie de filtros en el gancho de accióntemplate_redirect. Es un código bastante simple y parece una buena opción.

 49
Author: brasofilo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:10:28
<?php wp_make_link_relative( $link ) ?>

Convierte rutas URL completas en rutas relativas.

Elimina los protocolos http o https y el dominio. Mantiene la ruta ' / ' al principio, por lo que no es un verdadero enlace relativo, sino desde la base raíz web.

Referencia: Códice de Wordpress

 9
Author: davidcondrey,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-11-26 04:53:54

Estoy de acuerdo con Rup. Supongo que la razón principal es evitar la confusión en los caminos relativos. Creo que Wordpress puede trabajar desde cero con rutas relativas, pero el problema podría venir cuando se utilizan varios plugins,cómo se configura el tema, etc.

Una vez usé este plugin para rutas relativas, cuando trabajaba en servidores de prueba:

URLs Relativas Raíz
Convierte todas las URL a URL relacionadas con la raíz para alojar el mismo sitio en múltiples IPs, una producción más fácil migración y mejores pruebas de dispositivos móviles.

 5
Author: danielsalare,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-09-01 21:20:10

Lo resolví en mi sitio haciendo esto en funciones.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);

}

Tomé parte de un plugin, cortarlo en pedazos y hacer esto. Reemplazó TODOS los enlaces en mi sitio (menús, css, scripts, etc.) y todo estaba funcionando.

 0
Author: ikebastuz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-12-06 11:59:24

Debe usar get_home_url(), entonces sus enlaces son absolutos, pero no afecta si cambia la url del sitio

 -3
Author: Botond Vajna,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-01-23 15:16:29

Lo que creo que hace es que mientras cambia los nombres de dominio, el archivo de volcado sql que tiene puede reemplazar todas las instancias de nombre de dominio antiguo con uno nuevo. Esta es la única opción disponible, ya que no hay complementos que lo ayuden a hacer esto.

Esta es la forma más rápida ..

 -4
Author: Shiva,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-08-26 07:34:52

Hay un camino fácil

En lugar de /pagename/ use index.php/pagename/ o si no usa enlaces permanentes, haga lo siguiente:

Post

index.php?p=123

Página

index.php?page_id=42

Categoría

index.php?cat=7

Más información aquí : http://codex.wordpress.org/Linking_Posts_Pages_and_Categories

 -4
Author: Ger,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-02-02 17:48:59