Obține URL-ul curent (permalink) fără /page/{pagenum}/
Cum pot obține URL-ul curent (fie că este pagina principală, arhivă, arhivă tip post, arhivă categorie etc.) dar întotdeauna fără partea /page/{pagenum}/
dacă aceasta există? Astfel, dacă URL-ul real este:
example.com/category/uncategorized/
SAU
example.com/category/uncategorized/page/2/
atunci valoarea returnată va fi întotdeauna
example.com/category/uncategorized/

Puteți obține URL-ul curent prin home_url( $wp->request )
.
Încercați exemplul de mai jos:
global $wp;
// obține URL-ul curent cu șirul de interogare.
$current_url = home_url( $wp->request );
// obține poziția unde începe textul '/page.. '.
$pos = strpos($current_url , '/page');
// elimină șirul din poziția specifică
$finalurl = substr($current_url,0,$pos);
echo $finalurl;

De fapt, cea mai ușoară metodă ar fi să folosești get_pagenum_link()
care va returna URL-ul curent fără niciun parametru /page/*
.
Bonus
Poți de asemenea să-l folosești simplu pentru a construi link-urile "Anterior" și "Următor" dinamic folosind variabila de interogare 'paged'
:
// Obține numărul paginii curente.
$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
$first_page = '<a href="' . get_pagenum_link() . '" class="page-first"><<</a>';
$prev_page = '<a href="' . get_pagenum_link($paged - 1) . '" class="page-prev"><</a>';
$next_page = '<a href="' . get_pagenum_link($paged + 1) . ' class="page-next">></a>';
// Și având un obiect `WP_Query` poți construi și link-ul pentru ultima pagină:
$max = $the_query->max_num_pages;
$last_page = '<a href="' . get_pagenum_link($max) . '" class="page-last">>></a>';

Răspunsul dat de Govind Kumar a funcționat, însă returna URL-ul doar dacă /page/{număr_pagină}/ era prezent în URL și nu returna nimic dacă nu era. Aveam nevoie de o soluție universală care să întoarcă întotdeauna URL-ul de bază fără paginare, așa că am modificat puțin codul lui Govind și l-am încapsulat într-o funcție:
function get_nopaging_url() {
global $wp;
$current_url = home_url( $wp->request );
$position = strpos( $current_url , '/page' );
$nopaging_url = ( $position ) ? substr( $current_url, 0, $position ) : $current_url;
return trailingslashit( $nopaging_url );
}
echo get_nopaging_url();
Acum, returnează întotdeauna URL-ul corect.
(Acest lucru este util dacă trebuie să implementezi un fel de filtre pentru postări care adaugă un parametru pentru a filtra postările după, să zicem, un câmp meta. Astfel, chiar dacă un utilizator setează parametrul de filtrare pe pagina X, noile rezultate filtrate vor începe întotdeauna de la URL-ul de bază, nu de la pagina X, evitând eroarea 404 dacă sunt mai puține postări filtrate.)

Foarte bine. Foarte aproape. Dar '/page' nu este suficient de strict. De exemplu, http://page-me.com va returna o valoare; o valoare care este incorectă.

@ChiefAlchemist bun punct, nici măcar nu m-am gândit la faptul că subșirul /page
poate face parte din numele de domeniu (dacă nu este folosit www, bineînțeles). Adică, după părerea mea, este mai degrabă un caz marginal. Totuși, te-aș încuraja să contribui prin adăugarea de cod care să acopere și acest caz.

Vorotbov - O voi face. Te rog să vezi mai jos. fwiw, există o mulțime de cuvinte care conțin subșirul 'page'. Nu cred că este sigur să presupunem că este un caz marginal. Cel mai bine este să o facem cât mai precisă. Mai puține griji pe termen lung.

Adevărat, dar deși sunt de acord cu tine în general, întrebarea era legată de o problemă specifică, și a fost rezolvată în cel mai eficient mod pentru cazul particular. Dacă domeniul meu nu conține acest substring, atunci pur și simplu nu trebuie să folosesc regex-uri care sunt mai lente decât un simplu substr (și care funcționează bine în cazul meu). Nu este un plugin sau temă publică, așa că nu trebuie să acopăr toate cazurile posibile. Totuși, adăugarea ta este apreciată și sper că poate ajuta alți dezvoltatori în viitor. Mulțumesc!

Cerințele mele au fost foarte asemănătoare cu cele ale lui Ihor Vorotnov, cu excepția faptului că aveam mai mult de un parametru. Așadar, pornind de la răspunsul său, am modificat codul pentru a folosi o expresie regulată:
function get_nopaging_url() {
$current_url = $_SERVER[REQUEST_URI];
$pattern = '/page\\/[0-9]+\\//i';
$nopaging_url = preg_replace($pattern, '', $current_url);
return $nopaging_url;
}

Dacă dorești să elimini toate combinațiile posibile de paginare, atunci folosește acest fragment de cod:
// elimină paginarea din URL
$pattern = '/page(\/)*([0-9\/])*/i';
$url = preg_replace($pattern, '', $GLOBALS['wp']->request);
Acesta va gestiona
/page
/page/
/page/1
/page/1/
...
și este insensibil la majuscule/minuscule, funcționează pentru orice număr de pagină și va elimina orice combinație de numere finale/numere/numere... (poți testa aici: https://regex101.com/r/9fQaLC/1)
Dacă dorești să obții URL-ul complet cu prefixul http(s), adaugă
$url = home_url($url);
Pe această linie poți adăuga și parametri GET personalizați, astfel:
$url = home_url($url . '?typ=test');

Personal, încerc mereu să evit expresiile regulate (regex) dacă ceva poate fi făcut fără ele (și să rămână suficient de simplu). De asemenea, add_query_arg() ar trebui folosit pentru a adăuga parametri GET în loc de concatenarea de șiruri. Dar răspunsul în sine este corect și își face treaba, mulțumesc.

Mulțumesc - la prima vedere, asta este același lucru cu răspunsul lui Ihor. Poți edita răspunsul pentru a explica ce ai schimbat și de ce această variantă este mai bună?

Deși această întrebare a fost deja răspunsă aici (răspuns neacceptat), acest fragment de cod ar trebui să facă treaba: home_url(add_query_arg(NULL, NULL));
.

trait TraitURLStrip {
/**
* Elimină paginarea și query string-ul. Returnează un URL prietenos pentru filtrarea rezultatelor
*
* @param bool $str_url
* @param string $str_page
*
* @return bool|string
*/
protected function urlStrip( $str_url = false , $str_page = 'page' ){
if ( is_string( $str_url) ) {
$arr_parse_url = wp_parse_url( $str_url );
$str_path_no_page = '';
if ( isset( $arr_parse_url['path'] ) ) {
// dacă avem paginare, o eliminăm
$str_path_no_page = preg_replace( "/\/{$str_page}\/[0-9]*\/$/", "/", $arr_parse_url['path'] );
}
$str_scheme_host = "{$arr_parse_url['scheme']}://{$arr_parse_url['host']}";
return $str_scheme_host . $str_path_no_page;
}
return false;
}
}

Pot să întreb de ce returnezi false dacă $str_url nu este un string? Dacă din greșeală (ceea ce nu ar trebui să se întâmple, de altfel) treci altceva, distrugi datele. Cred că ar fi mai bine să returnezi $str_url nemodificat în schimb. De asemenea, ai o verificare pentru string, dar nu te asiguri că este de fapt un URL care poate fi analizat (iar dacă nu este, codul următor va eșua - wp_parse_url poate returna false, null, int, string și array). În plus, nu sunt sigur dacă folosirea acestuia ca trăsătură are sens, nu toată lumea folosește clase peste tot (hei, este WordPress, nu?).
