Obtener la URL de la página actual (incluyendo paginación)

1 feb 2013, 00:05:33
Vistas: 75.8K
Votos: 18

¿Existe alguna función de WordPress para obtener automáticamente la URL correcta de la página actual? Es decir, si acabo de abrir una entrada individual, la función devuelve lo mismo que get_permalink(), pero si estoy en una instancia paginada de una página (al paginar a través de los comentarios), la función devuelve lo mismo que haría get_pagenum_link(get_query_var('paged')).

He buscado en el codex pero no encontré lo que estaba buscando. (Incluso get_pagenum_link() no está documentada allí.)

Ya conozco esta función, pero me gustaría saber si existe una función "nativa" de WordPress que haga el trabajo.

0
Todas las respuestas a la pregunta 8
1
37

Además de la respuesta de Rajeev Vyas, no necesitas pasar ningún parámetro no vacío a add_query_arg(). Lo siguiente siempre me ha funcionado bien:

// URI relativa actual:
$current_rel_uri = add_query_arg( NULL, NULL );

// URI absoluta actual (en un sitio único):
$current_uri = home_url( add_query_arg( NULL, NULL ) );

La función recurre a $_SERVER[ 'REQUEST_URI' ] y le aplica urlencode_deep(). Consulta https://github.com/WordPress/WordPress/blob/3.8/wp-includes/functions.php#L673

Edición: Como $_SERVER[ 'REQUEST_URI' ] representa entrada de usuario sin filtrar, siempre se debe escapar el valor de retorno de add_query_arg() cuando cambia el contexto. Por ejemplo, usa esc_url_raw() para uso en la base de datos o esc_attr() o esc_url() para HTML.

Actualización

El ejemplo mostrado que debería crear una URI absoluta (que incluya esquema y host) no funciona en multisitio con subdirectorios, ya que home_url() devolvería la URI completa incluyendo un segmento de ruta. Una mejor solución para código compatible con multisitio sería esta:

// URI absoluta en entorno compatible con multisitio
$parts = parse_url( home_url() );
$current_uri = "{$parts['scheme']}://{$parts['host']}" . add_query_arg( NULL, NULL );

El núcleo de WordPress no soporta puerto, usuario o contraseña en la URL de un sitio multisitio, por lo que esto debería ser suficiente.

15 dic 2013 14:04:44
Comentarios

Frustrante que el OP no haya seleccionado esta respuesta como la Solución, que lo es. Gracias.

cfx cfx
9 ago 2019 19:05:43
1
global $wp;
$current_url = add_query_arg( $wp->query_string, '', home_url( $wp->request ) );

No es una función, pero definitivamente utiliza código de WordPress..

http://kovshenin.com/2012/current-url-in-wordpress/

1 feb 2013 08:17:45
Comentarios

Funciona parcialmente, pero algunas cosas no funcionan como quiero: parámetros como year se agregan a la cadena de consulta, aunque no estaban allí antes, y otros parámetros, por ejemplo el parámetro replytocom, se pierden. ¿Conoces una solución para esto?

René René
1 feb 2013 15:32:56
0

add_query_args( null, null ) creará un elemento de array con una clave vacía ($qs[""] = null) aunque no afectará el resultado.


Según add_query_arg() | Función | Recursos para Desarrolladores WordPress, el segundo y tercer parámetros son opcionales y pueden omitirse.

add_query_args( null, null ) puede ser aún más corto.

$current_url = add_query_args( [] );

También existe la versión más corta, aunque no se recomienda ya que el primer parámetro es obligatorio.

$current_url = add_query_args();

Además, ten en cuenta que tanto home_url( add_query_vars( [] ) ) como home_url( add_query_arg( null, null ) ) podrían no devolver la URL real cuando WordPress está instalado en un subdirectorio.

Por ejemplo, podría devolverse https://example.com/wp/wp/foo cuando WordPress está instalado en https://example.com/wp/.


Actualización: 23/01/2017

Mi versión basada en la solución de David para obtener la URL absoluta.

$parts = parse_url(home_url());
$uri   = $parts['scheme'] . '://' . $parts['host'];

if (array_key_exists('port', $parts)) {
    $uri .= ':' . $parts['port'];
}

$uri .= add_query_arg([]);
29 ago 2016 19:35:32
2

Para mí <?php esc_url(the_permalink()); ?> funciona (en una página de archivo con paginación).

6 feb 2017 10:56:57
Comentarios

Imposible. the_permalink() muestra el enlace permanente escapado, no devuelve nada. La función esc_url() no recibe nada, y si lo hiciera, sería una URL escapada.

fuxia fuxia
6 feb 2017 11:38:37

Tienes razón, solo funcionó debido al almacenamiento en caché de los enlaces permanentes, creo.

herrfischer herrfischer
6 feb 2017 17:33:21
1

1) $_SERVER['REQUEST_URI'] - Devuelve la URL utilizada para acceder a la página que está ejecutando el script. Si necesitas escribir http://www.example.com/product.php?id=5 para acceder a la página, entonces $_SERVER['REQUEST_URI'] devolverá /product.php?id=5.

2) $_SERVER['DOCUMENT_ROOT'] – Devuelve el directorio raíz del servidor especificado en el archivo de configuración del servidor. Esta variable suele devolver rutas como /usr/yoursite/www en Linux y D:/xamps/xampp/htdocs en Windows.

3) $_SERVER['HTTP_HOST'] – Devuelve el nombre del host según se encuentra en el encabezado HTTP. Esta variable generalmente devuelve rutas como example.com cuando ves http://example.com en la barra de direcciones del navegador, y devuelve www.example.com cuando ves http://www.example.com. Esto es muy útil cuando necesitas preservar la sesión al realizar pagos en línea con PHP, ya que la sesión almacenada para http://example.com no es la misma que para http://www.example.com.

4) $_SERVER['HTTP_USER_AGENT'] - Devuelve los detalles del agente de usuario (navegador) que está accediendo a la página web. Podemos usar strpos($_SERVER["HTTP_USER_AGENT"],"MSIE") para detectar Microsoft Internet Explorer o strpos($_SERVER["HTTP_USER_AGENT"],"Firefox") para detectar el navegador Firefox en PHP.

5) $_SERVER['PHP_SELF'] - Devuelve el nombre del archivo del script que se está ejecutando actualmente. Supongamos que estás accediendo a la URL http://www.example.com/product.php?id=5, entonces $_SERVER['PHP_SELF'] devolverá /product.php en tu script.

6) $_SERVER['QUERY_STRING'] – Devuelve la cadena de consulta si se utiliza para acceder al script que se está ejecutando actualmente. Las cadenas de consulta son aquellas que aparecen después del signo "?". Si usas $_SERVER['QUERY_STRING'] en el script que ejecuta la siguiente URL http://www.example.com/index.php?id=5&page=product, entonces devolverá id=5&page=product en tu script.

7) $_SERVER['REMOTE_ADDR'] – Devuelve la dirección IP de la máquina remota que está accediendo a la página actual. Sin embargo, no puedes confiar completamente en $_SERVER['REMOTE_ADDR'] para obtener la dirección IP real de la máquina del cliente. Consulta este artículo para saber cómo obtener la dirección IP real en PHP.

8) $_SERVER['SCRIPT_FILENAME'] - Devuelve la ruta absoluta del archivo que se está ejecutando actualmente. Devuelve rutas como var/example.com/www/product.php en Linux y rutas como D:/xampp/xampp/htdocs/test/example.php en Windows.

2 feb 2014 22:49:58
Comentarios

Ten en cuenta que ninguno de estos está disponible en tu CLI y, por lo tanto, son inútiles para trabajos cron.

kaiser kaiser
26 feb 2014 13:38:11
2
-1

No tengo conocimiento sobre paginación pero Puedes usar esta función para obtener la URL dentro del loop

<?php $ID = get_the_ID(); 
echo get_permalink( $ID ); ?>

O si prefieres no usar PHP, también puedes optar por el método jQuery aquí (esto te ayudará a que funcione fuera del loop)

$(document).ready(function () {
var vhref = $(location).attr('href');
var vTitle = $(this).attr('title');
$('#spnTitle').html('' + vTitle + '');
$('#spnURL').html('' + vhref + '');
});​

O si prefieres usar una función PHP, necesitas obtener el ID fuera del loop

1 feb 2013 07:55:02
Comentarios

Lo siento, pero esto no es lo que pedí... Además, the_permalink() no necesita el ID cuando se llama dentro del bucle.

René René
1 feb 2013 12:04:53

Esta respuesta tenía muy poco que ver con la pregunta original. No la respondió correctamente ni proporcionó información valiosa sobre el tema.

jounileander jounileander
4 jul 2013 11:22:21
1
-1

wp_guess_url es lo que estás buscando.

Intenta adivinar la URL del sitio.

Eliminará los enlaces de wp-admin para recuperar solo las URLs que no estén en el directorio wp-admin.

11 mar 2013 12:15:23
Comentarios

Esto devuelve una URL completamente diferente a la página actual cuando intenté usarlo.

Kirby Kirby
19 may 2015 19:10:40
1
-2

Puedes usar la función de WordPress para obtener la URL de la página actual:

the_permalink()

Esto te devolverá el enlace de la URL de la página actual.

26 feb 2014 12:15:51
Comentarios

Casi; the_permalink() imprimirá la URL del post actual. Pero no funcionará para otras solicitudes y no incluirá variables como la paginación. Así que no es realmente la respuesta que @René Schubert está buscando.

TheDeadMedic TheDeadMedic
26 feb 2014 13:10:24