Obtener la URL de la página actual (incluyendo paginación)
¿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.

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.

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..

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([]);

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.

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.

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

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

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.
