Obține Permalink fără domeniu (obține permalink relativ)
Acesta este codul pe care îl folosesc:
<?php echo str_replace( home_url(), '', get_permalink($post->ID) ); ?>
Ceea ce face este să afișeze permalink-ul ca URL relativ, adică doar slug-ul. De exemplu, dacă permalink-ul este http://example.com/2012/01/post-title/
, URL-ul relativ generat de cod ar arăta ca /2012/01/post-title/
.
Problemă: Toate Articolele și Paginile arată permalink-ul corect, ceea ce este excelent. Dar toate celelalte pagini (inclusiv Prima Pagină, Căutare și Arhive) arată URL-ul relativ al primului articol și nu pe cel al paginilor respective. Aveți vreo idee de ce? Ce fac greșit aici?
Referință: Obține permalink-ul paginii fără wpurl
EDIT: Iată ce altceva am încercat:
În functions.php
function get_relative_permalink( $url ) {
$url = get_permalink();
return str_replace( home_url(), "", $url );
}
În header.php
<link rel="alternate" hreflang="en-IN" href="http://in.example.com/<?php echo get_relative_permalink(); ?>" />
Aceeași problemă și cu aceasta. Dar aceasta arată și o eroare mai puțin informativă.

Nu este nevoie să folosești str_replace sau preg_replace, doar transmite permalink-ul la wp_make_link_relative().
Funcția încorporată este mult mai simplă și, de asemenea, gestionează elegant slash-urile finale, situațiile în care home_url și site_url sunt diferite și diverse alte cazuri particulare.

Folosește $_SERVER['REQUEST_URI']
în loc de get_permalink()
pentru a obține URL-ul curent. get_permalink
va returna adresa completă a postării curente, nu adresa URL-ului vizitat.
De exemplu, pentru example.com/test/page echo $_SERVER['REQUEST_URI'];
va afișa /test/page
Reține că acest lucru nu include hashtag-ul, deoarece acea parte nu este niciodată trimisă către server, și de asemenea nu include parametrii de tip ?foo=bar
, aceștia se află în tabloul $_GET
.

Funcționează perfect!!! Mică corecție — în al doilea cod lipsește un ghilimele. echo $_SERVER['REQUEST_URI'];
— și mulțumesc!

@TomJNowell Dacă nu greșesc, $_SERVER['REQUEST_URI'] vă va oferi URL-ul curent, ceea ce poate fi o problemă dacă este un articol paginat, adică /test/pagina/2 va fi preluat în timp ce utilizarea get_permalink() ar fi soluția pentru această problemă. Am dreptate?

Ceea ce este similar cu problema originală a autorului, ar trebui să fac câteva teste, dar poți să adaugi propriul răspuns și dacă funcționează voi vota pozitiv =]

De ce a fost acceptat acest răspuns? Nu răspunde nici pe departe la întrebarea OP!

@JimMaguire este cu siguranță legat de ceea ce a întrebat OP, însă autorul răspunsului a uitat să menționeze că returnează practic TOTUL după domeniu până la hash (care nu este trimis serverului prin design). Deci este doar un punct de plecare, nu soluția finală.

Obține o soluție aproape finală: a) explode()
șirul după ?
și păstrează doar prima parte [0]
pentru a elimina o posibilă interogare GET b) execută o înlocuire (regexp) (preg_replace()
) pentru a elimina orice "parametri URL frumoși" posibili, cel mai comun fiind page/N/
- numărul paginii și alți parametri posibili care se pot schimba, de aceea regexp... de exemplu preg_replace( '/\/page\/\d+\//', '/', $url )
