Obtener Permalink sin dominio (es decir, obtener relativo permalink) [duplicar]

9

Este es el código que estoy usando:

<?php echo str_replace( home_url(), '', get_permalink($post->ID) ); ?>

Lo que hace es generar el enlace permanente como una URL relativa, es decir, solo el slug. Por ejemplo, si el enlace permanente es http://example.com/2012/01/post-title/ , la salida de URL relativa del código se vería como /2012/01/post-title/ .

Problema: Todas las publicaciones y páginas muestran el enlace permanente correcto, lo cual es genial. Pero todas las demás páginas (incluyendo Inicio, Búsqueda y Archivos) muestran la URL relativa de la primera publicación y no la de las páginas respectivas. ¿Alguna idea de por qué? ¿Qué estoy haciendo mal aquí?

Referencia: Obtenga el enlace permanente de la página sin wpurl

EDITAR: Esto es lo que más he probado:

En functions.php

function get_relative_permalink( $url ) {
    $url = get_permalink();
    return str_replace( home_url(), "", $url );
}

En header.php

<link rel="alternate" hreflang="en-IN" href="http://in.example.com/<?php echo get_relative_permalink(); ?>" />

El mismo problema con esto también. Pero este también muestra un error no muy informativo.

    
pregunta its_me 28.08.2012 - 15:09

3 respuestas

7

Use $_SERVER['REQUEST_URI'] en lugar de get_permalink() para obtener la URL actual.

por ejemplo para example.com/test/page echo $_SERVER['REQUEST_URI']; imprime /test/page

    
respondido por el Tom J Nowell 28.08.2012 - 15:46
6

Yo uso

str_replace(home_url(), '', get_permalink()); 

Si la raíz del sitio no es /

    
respondido por el Tymek 31.10.2013 - 23:40
0

Esto funciona para mí:

function force_relative_url ($url)
{
    return preg_replace ('/^(http)?s?:?\/\/[^\/]*(\/?.*)$/i', '$2', '' . $url);
}

Para usarlo en un enlace permanente:

$relative_permalink = force_relative_url (get_permalink ($post->ID));
    
respondido por el gregn3 22.04.2016 - 17:05

Lea otras preguntas en las etiquetas