Cum să obții URL-uri prietenoase cu add_query_arg în permalink-uri WordPress

20 dec. 2013, 10:55:20
Vizualizări: 18K
Voturi: 10

Cu funcția add_query_arg() este ușor să adaugi parametri suplimentari unui URL și de asemenea simplu să creezi o regulă de rescriere. Până aici totul este în regulă. Problema este înlocuirea URL-ului făcută de WordPress.

Când am un URL de genul:

www.mysite.com/?page_id=1&myvar=test

și introduc acest URL în bara de adrese a browserului cu permalink-uri activate. Acest link va deveni:

www.example.com/pagenume/?myvar=test

DAR: ceea ce aș dori să obțin este:

www.example.com/pagenume/test

În final, aș dori să folosesc cod de genul:

<a href="<?php add_query_arg( 'myvar', 'test', get_permalink() ) ?>"> .... </a>

care să rezulte în:

www.example.com/pagenume/test

Cum poate fi realizat acest lucru? Am petrecut ore întregi citind documentația și nu am găsit o soluție.

1
Comentarii

Aș vrea să știu cum se face asta. +1 la întrebare.

henrywright henrywright
27 dec. 2013 23:04:20
Toate răspunsurile la întrebare 3
0

Tocmai am întâmpinat aceeași situație și am dat peste această întrebare în timp ce căutam pe Google.

Se pare că acest lucru nu este posibil. Nucleul WordPress pur și simplu adaugă șiruri de caractere la URL dacă permalink-urile frumoase sunt activate, vezi https://core.trac.wordpress.org/browser/tags/3.9.1/src/wp-includes/link-template.php#L571

Pentru cei interesați de acest subiect: Puteți face ceva de genul acesta în codul dvs.:

if ( '' != get_option('permalink_structure') ) {
    // folosind permalink-uri frumoase, adăugați la URL
    $read = user_trailingslashit( get_permalink() . 'test' ); // www.example.com/pagină/test
  } else {
    $read = add_query_arg( 'test', '', get_permalink() ); // www.example.com/pagină/?test
  }

Această soluție a fost, de asemenea, recomandată de Jon Cave într-un comentariu pe blogul oficial make: https://make.wordpress.org/plugins/2012/06/07/rewrite-endpoints-api/#comment-686

10 iul. 2014 20:14:30
1

Soluția în WordPress ar fi să adăugăm reguli de rescriere pentru a obține ceva de genul:

    add_action( 'init', 'my_rewrite_add_rewrites' );
    function my_rewrite_add_rewrites()
    {
        add_rewrite_rule( 'calendar/([0-9]{4})/?$', 'index.php?post_type=events&year=$matches[1]', 'top' );
        add_rewrite_rule( 'calendar/([0-9]{4})/page/?([0-9]{1,})/?$', 'index.php?post_type=events&year=$matches[1]&paged=$matches[2]', 'top' );
    }

citește mai mult: https://codex.wordpress.org/Rewrite_API/add_rewrite_rule

16 feb. 2017 11:05:53
Comentarii

Ar fi trebuit să faci mai complicat să dai vot negativ...

Vishal Kumar Sahu Vishal Kumar Sahu
25 mar. 2017 07:07:40
0

WordPress nu vă va permite să faceți acest lucru ușor. De fapt, regulile de rescriere sunt singura opțiune pentru a realiza acest tip de lucru în WordPress, iar regulile de rescriere din WordPress pot deveni foarte dezordonate atunci când site-ul dvs. crește, deoarece plugin-urile și temele (și dvs. la fel) pot adăuga reguli de rescriere personalizate deasupra celor existente în instalarea dvs. (multi)sit.

Soluția lui @swissspidy va funcționa dacă aveți deja o regulă de rescriere pentru cheia dvs. (myvar) și utilizați permalink-uri în prima condiție, apoi reveniți la șirurile de interogare tradiționale în absența acelor condiții. Soluția lui @Johnathan Joosten arată cât de complexe pot deveni regulile de rescriere în WordPress (imaginați-vă să faceți asta pentru toate cheile și valorile șirurilor de interogare...)

Am întâlnit această problemă de câteva ori înainte în timp ce lucram la câteva proiecte de dimensiuni medii pentru clienții mei și am reușit să obțin ceva similar folosind un plugin numit Obfusquer. Conform site-ului web, acesta maschează toate șirurile de interogare WordPress cu chei secrete definite de utilizator și oferă, de asemenea, hook-uri pentru cerințe personalizate avansate.

Interesant, nu este listat în depozitul de plugin-uri WordPress, și cred că veți avea nevoie de un abonament (care cred că este foarte accesibil, deoarece o singură licență va funcționa chiar și în instalări multisit), dar iată un link către el dacă aveți nevoie să mascați/ascundeți șirurile de interogare în instalările WordPress. De asemenea, au documentație aici.

Acum folosesc acest plugin în aproape toate proiectele mele WordPress, sper să vă ajute în nevoile dumneavoastră. Noroc!

27 nov. 2019 12:23:06