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

12

¿Existe una función WP para obtener automáticamente la URL correcta de la página actual? Lo que significa que si acabo de abrir una sola publicación, 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 get_pagenum_link(get_query_var('paged')) haría .

He buscado en el códice pero no encontré lo que estaba buscando. (Pero incluso get_pagenum_link() no está documentado allí).

Ya conozco esta función , pero me alegraría que hubiera una función WP "nativa" que sí el trabajo.

Gracias de antemano! Saludos, René

    
pregunta René Schubert 31.01.2013 - 23:05

8 respuestas

22

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

// relative current URI:
$current_rel_uri = add_query_arg( NULL, NULL );

// absolute current URI (on single site):
$current_uri = home_url( add_query_arg( NULL, NULL ) );

La función recae en $_SERVER[ 'REQUEST_URI' ] y le aplica urlencode_deep() . Consulte enlace

Editar: Como $_SERVER[ 'REQUEST_URI' ] representa la entrada del usuario sin filtrar, siempre se debe evitar el valor de retorno de add_query_arg() cuando se cambia el contexto. Por ejemplo, use esc_url_raw() para el uso de DB o esc_attr() o esc_url() para HTML.

Actualizar

El ejemplo mostrado que debería crear un URI absoluto (que contiene el esquema y el host) no funciona en varios sitios con subdirectorios, ya que home_url() devolverá el URI completo, incluido un segmento de ruta. Una mejor solución para el código multisitio sería:

// absolute URI in multisite aware environment
$parts = parse_url( home_url() );
$current_uri = "{$parts['scheme']}://{$parts['host']}" . add_query_arg( NULL, NULL );

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

    
respondido por el David 15.12.2013 - 13:04
3
global $wp;
$current_url = add_query_arg( $wp->query_string, '', home_url( $wp->request ) );

No es una función, pero definitivamente usa el código de wordpress ..

enlace

    
respondido por el Rajeev Vyas 01.02.2013 - 07:17
0

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

2) $_SERVER['DOCUMENT_ROOT'] : devuelve el directorio raíz del servidor que se especifica en el archivo de configuración del servidor. Esta variable generalmente devuelve la ruta como /usr/yoursite/www en Linux y D:/xamps/xampp/htdocs en windows.

3) $_SERVER['HTTP_HOST'] : devuelve el nombre del host como se encuentra en el encabezado http. Esta variable generalmente devuelve la ruta como example.com cuando encuentra http://example.com en la barra de direcciones del navegador y devuelve www.example.com cuando ve http://www.example.com en la barra de direcciones. Esto es bastante útil cuando tienes que conservar la sesión mientras realizas el pago en línea usando 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 del usuario (navegador) al acceder a la página web. Podemos usar strpos($_SERVER["HTTP_USER_AGENT"],”MSIE”) para detectar Microsoft Internet explorer o usted puede usar strpos($_SERVER["HTTP_USER_AGENT"],”Firefox”) para detectar el navegador Firefox en PHP.

5) $_SERVER['PHP_SELF'] : devuelve el nombre de archivo del script que se está ejecutando actualmente. Supongamos que está accediendo a la URL http://www.example.com/product.php?id=5 y luego $_SERVER['PHP_SELF'] devuelve /product.php en su script.

6) $_SERVER['QUERY_STRING'] : devuelve la cadena de consulta si la cadena de consulta se usa para acceder a la secuencia de comandos que se está ejecutando actualmente. Las cadenas de consulta son aquellas que están disponibles después de "?" Sign.si usa $_SERVER['QUERY_STRING'] en la secuencia de comandos ejecutando la siguiente URL http://www.example.com/index.php?id=5&page=product , entonces devuelve id=5&page=product en su secuencia de comandos.

7) $_SERVER['REMOTE_ADDR'] : devuelve la dirección IP de la máquina remota que accede a la página actual. Pero no puede confiar en $_SERVER['REMOTE_ADDR'] para obtener la dirección IP real de la máquina del cliente. Consulte este artículo para saber cómo obtener direcciones IP reales en PHP.

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

    
respondido por el Foxsk8 02.02.2014 - 21:49
0

wp_guess_url es lo que está buscando.

  

Adivina la URL del sitio.

     

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

    
respondido por el Jesse 11.03.2013 - 11:15
0

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

Según add_query_arg () | Función | Recursos para desarrolladores de WordPress , Los parámetros segundo, tercero son opcionales y se pueden omitir.

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

$current_url = add_query_args( [] );

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

$current_url = add_query_args();

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

por ejemplo https://example.com/wp/wp/foo puede devolverse cuando WordPress está instalado en https://example.com/wp/ .

Actualización: 2017/01/23

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([]);
    
respondido por el Whizark 29.08.2016 - 18:35
0

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

    
respondido por el Henning Fischer 06.02.2017 - 09:56
-1

No ahora de paginación pero Puedes usar esta función para obtener url dentro del bucle

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

O si no prefiere usar php, también puede optar por el método jquery aquí (esto le ayudará a hacerlo funcionar fuera del bucle)

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

o si prefieres usar la función php, necesitas obtener el ID fuera del bucle

    
respondido por el vaibhav 01.02.2013 - 06:55
-2

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

the_permalink()

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

    
respondido por el Vivek Pandey 26.02.2014 - 11:15

Lea otras preguntas en las etiquetas