web-dev-qa-db-fra.com

Obtenir un lien permanent sans domaine (c’est-à-dire obtenir un lien permanent)

C'est le code que j'utilise:

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

Ce qu’il fait, c’est le permalien en sortie sous forme d’URL relative, c’est-à-dire le slug uniquement. Par exemple, si le permalien est http://example.com/2012/01/post-title/, l'URL relative générée par le code ressemblera à /2012/01/post-title/.

Problème: Tous les posts et les pages affichent le bon permalien, ce qui est génial. Mais toutes les autres pages (y compris Accueil, Recherche et Archives) affichent l'URL relative du premier message et non celle des pages respectives. Une idée pourquoi? Qu'est-ce que je fais mal ici?

Référence: Obtenir la page de lien permanent sans wpurl


EDIT: Voici ce que j'ai encore essayé:

Dans functions.php

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

Dans header.php

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

Même problème avec cela aussi. Mais celui-ci montre aussi une erreur peu informative.

10
its_me

Utilisez $_SERVER['REQUEST_URI'] au lieu de get_permalink() pour récupérer l'URL actuelle.

par exemple. par exemple.com/test/page echo $_SERVER['REQUEST_URI']; imprime /test/page

7
Tom J Nowell

J'utilise

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

Si la racine du site n'est pas /

8
Tymek

Cela fonctionne pour moi:

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

Pour l'utiliser sur un permalien:

$relative_permalink = force_relative_url (get_permalink ($post->ID));
0
gregn3