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.
senectus
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!
its_me
@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?
Christine Cooper
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 =]
Tom J Nowell
De ce a fost acceptat acest răspuns? Nu răspunde nici pe departe la întrebarea OP!
Jim Maguire
@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ă.
jave.web
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 )
jave.web