Obtenir un lien permanent sans domaine (c’est-à-dire obtenir un lien permanent relatif) [dupliquer]

9

C'est le code que j'utilise:

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

Ce qu'il fait est de générer le permalien sous forme d'URL relative, c'est-à-dire uniquement le slug. Par exemple, si le lien permanent 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 articles et toutes les pages affichent le bon permalien, ce qui est excellent. 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 un lien permanent pour une page sans mot de passe .

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.

    
posée its_me 28.08.2012 - 15:09

3 réponses

7

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']; affiche /test/page

    
réponse donnée Tom J Nowell 28.08.2012 - 15:46
6

j'utilise

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

Si la racine du site n'est pas /

    
réponse donnée Tymek 31.10.2013 - 23:40
0

Cela fonctionne pour moi:

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

Pour l'utiliser sur un lien permanent:

$relative_permalink = force_relative_url (get_permalink ($post->ID));
    
réponse donnée gregn3 22.04.2016 - 17:05

Lire d'autres questions sur les étiquettes