Maparea mai multor URL-uri către aceeași pagină

20 nov. 2011, 17:48:29
Vizualizări: 23.1K
Voturi: 5

Tocmai am dat peste această pagină cu cerințe aproape similare cu ale mele

Multiple puncte finale către aceeași pagină

Trebuie să realizez aceeași funcționalitate dar vreau să transmit și niște parametri către pagina unde vor fi mapate toate aceste URL-uri. De exemplu:

http://mysite.com/test/link1
http://mysite.com/test/link2 
http://mysite.com/test/link3 

Vreau să le mapez către același URL

http://mysite.com/test/finalDestination

Pe lângă asta, vreau să trimit și alți parametri precum:

  1. email utilizator
  2. nume utilizator

astfel încât să îi pot folosi în acea pagină pentru logica mea personalizată. Știu cum să fac asta în JSP/Java unde pot să îi trimit ca parametri de request în cererea POST și să îi recuperez în JSP-ul final

Cum pot realiza acest lucru în WordPress folosind PHP. Preferințele mele sunt să nu folosesc query string-uri.

Sau este posibil ca dacă creez URL-uri precum

http://mysite.com/test/user1
http://mysite.com/test/user2 
http://mysite.com/test/user3

unde user1 etc pot fi preluați din baza de date și putem asigura că vor fi unici în aplicație și maparea acestor URL-uri către același punct final. Cum pot prelua numele de utilizator în pagina mea finală?

Mulțumesc anticipat

0
Toate răspunsurile la întrebare 3
18

Puteți folosi același răspuns ca la întrebarea la care v-ați referit (am răspuns deja). Iată cum ați putea modifica pentru a transmite argumentele:

<?php
    add_action('init', 'add_my_rule');

    function add_my_rule()
    {
        global $wp;
        $wp->add_query_var('args');

        add_rewrite_rule('test\/finaldestination\/(.*)','index.php?pagename=about&args=$matches[1]','top');
    }
?>

Presupunând că 'finaldestination' rămâne mereu același, iar numele paginii (slug-ul) este 'about' (puteți schimba ambele). Aplicați șablonul personalizat la această pagină, iar în șablon, faceți acest lucru:

//dacă accesați http://.../test/finaldestination/name/romeo, atunci $params va fi name/romeo. Puteți despărți acest lucru și obține valoarea.
$params = get_query_var('args');

După ce ați introdus acest cod în fișierul dvs., mergeți la Setări>Legături permanente și apăsați butonul de salvare. Nu am testat acest lucru, dar am folosit ceva similar într-un proiect recent și sunt sigur că va funcționa.

22 nov. 2011 18:09:25
Comentarii

Mulțumesc pentru sugestie. Practic am o pagină cu URL-uri http://localhost/blog/wordpress/author/admin/ unde vor fi afișate postările autorului asociat. Am o pagină author.php unde folosesc o interogare personalizată bazată pe niște parametri. Tot ce vreau este ca dacă am un autor cu numele "my-author", URL-ul să fie http://localhost/blog/wordpress/author/my-author/ care să corespundă cu "http://localhost/blog/wordpress/author/admin/" și să pot folosi "my-author" pentru a interoga baza de date și a prelua postările sale. Nu sunt sigur cât de fezabil este acest lucru.

Umesh Awasthi Umesh Awasthi
22 nov. 2011 18:19:29

Am încercat codul tău astfel: $wp->add_query_var('args'); add_rewrite_rule('author/(.*)','index.php?pagename=author&args=$matches[1]','top'); și când am încercat să accesez URL-ul http://localhost/blog/wordpress/author/my-work/ mi-a dat eroarea 404

Umesh Awasthi Umesh Awasthi
26 nov. 2011 10:03:39

De ce încerci să creezi un astfel de URL? WordPress are deja URL-ul arhivei autorului în această formă. Deci http://localhost/blog/author/my-author va pointa întotdeauna către pagina de arhivă pentru my-author. De asemenea, un motiv posibil ar putea fi că author este un termen rezervat în universul WP. Ar trebui să încerci cu alt termen în loc de author. Și, este slug-ul paginii tale author?

Rutwick Gangurde Rutwick Gangurde
26 nov. 2011 11:16:41

nu sunt sigur ce înțelegi prin slug-ul paginii ca 'author', fiind nou pe platformă mă face confuz. Ideea este că acești autori vor fi autori invitați fără profil stocat sau nu vom crea un cont de utilizator pentru ei, tot ce putem face este să stocăm un câmp cu numele autorului în secțiunea personalizată a postării și să-l folosim pentru a prelua postările lui/ei

Umesh Awasthi Umesh Awasthi
26 nov. 2011 11:50:45

Ohh... dacă ești nou pe platformă, atunci nu ar trebui să te joci cu URL-urile. Ceea ce încerci să faci va necesita mult mai mult decât o simplă regulă de rescriere a URL-ului! O modalitate ar fi să adaugi cheia câmpurilor meta (să spunem numele autorului) la URL și apoi să obții postările care au această cheie meta.

Rutwick Gangurde Rutwick Gangurde
26 nov. 2011 12:04:39

Asta încerc să realizez. Tema mea are deja fișierul author.php, așa că ceea ce încerc să obțin este ca atunci când cineva accesează URL-ul de tip localhost/blog/wordpress/author/aum-kumar să redirecționez fiecare URL cu modelul localhost/blog/wordpress/author/ către pagina author.php unde pot folosi ultimul parametru ca valoare pentru căutare, deci în cazul meu "aum-kumar" va fi valoarea câmpului meta, dar până acum nu am reușit să obțin asta

Umesh Awasthi Umesh Awasthi
26 nov. 2011 12:10:31

Nu este nevoie să scrii o nouă regulă, deoarece ceea ce dorești deja există. Ceea ce poți face este să creezi un cont pentru autorul invitat cu rolul de Contributor, astfel încât acesta să poată scrie un articol, dar să nu-l publice. În acest fel, pagina sa de arhivă va fi accesibilă exact așa cum dorești, fără a rescrie orice URL-uri. Citește mai multe despre rolurile WordPress: http://codex.wordpress.org/Roles_and_Capabilities

Rutwick Gangurde Rutwick Gangurde
26 nov. 2011 12:22:07

de acord, dar există câțiva autori care doar doresc să trimită articolul lor și atât. Am venit cu aceeași sugestie, dar a fost respinsă, așa că sunt nevoit să caut o astfel de alternativă.

Umesh Awasthi Umesh Awasthi
26 nov. 2011 12:26:14

hai să continuăm această discuție în chat

Rutwick Gangurde Rutwick Gangurde
26 nov. 2011 12:27:55

@Moderator Sistemul nu mă lasă să discut, se pare că nu am 20 de reputație în rețea!

Rutwick Gangurde Rutwick Gangurde
26 nov. 2011 12:30:11

Sunt pe chat, poți să mă contactezi acolo dacă ești și tu

Umesh Awasthi Umesh Awasthi
26 nov. 2011 12:49:04

Am încercat deja să intru pe chat! Dar din nu știu ce motiv nu mă lasă!

Rutwick Gangurde Rutwick Gangurde
26 nov. 2011 12:53:26

este foarte trist, poți să-mi arăți cum pot realiza asta? deoarece sunt blocat aici cumva

Umesh Awasthi Umesh Awasthi
26 nov. 2011 13:07:17

Explicația completă este destul de lungă, dar voi da câteva sfaturi. În primul rând, nu folosi termenul author, folosește altceva în timp ce scrii regula. Folosește parametrul args pentru a trimite un nume de autor către fișierul tău de template și pentru a obține și afișa postările folosind acest nume.

Rutwick Gangurde Rutwick Gangurde
26 nov. 2011 13:13:04

am încercat cu writer chiar ceva de genul add_action('init', 'add_my_rule');
function add_my_rule() {
global $wp; $wp->add_query_var('args');
add_rewrite_rule('writer\/(.*)','index.php?pagename=author&args=$matches[1]','top'); } dar încă nu funcționează. Ca o observație suplimentară, am pagina author.php ca pagină personalizată în directorul temei mele, dar tot primesc eroare 404

Umesh Awasthi Umesh Awasthi
26 nov. 2011 13:29:07

Va trebui să modifici și slug-ul paginii! Editează pagina căreia i-ai aplicat șablonul și schimbă slug-ul în writer. Apoi, în această regulă, schimbă pagename=author în pagename=writer. După aceea, mergi la Setări>Legături permanente și doar dă click pe salvare.

Rutwick Gangurde Rutwick Gangurde
26 nov. 2011 13:47:17

am înțeles ce ai spus. Nu creasem o pagină în panoul de administrare, dar după ce am creat o pagină și i-am atribuit șablonul meu personalizat, aceasta apare și în bara de meniu. Pot să cer WordPress să nu o afișeze în meniu/submeniu? Nu am opțiunea de a-ți vota postarea, dar mi-ai făcut ziua mai bună :) mulțumesc pentru ajutor până acum

Umesh Awasthi Umesh Awasthi
26 nov. 2011 14:07:52

Cu plăcere! Mă bucur că am putut ajuta! Poți să-mi votezi/accepti răspunsul mai târziu când vei avea suficientă reputație! :)

Rutwick Gangurde Rutwick Gangurde
26 nov. 2011 14:18:38
Arată celelalte 13 comentarii
0

Asigurați-vă că adăugați o URL canonică în antetul paginilor duplicate, referindu-se la instanța principală a paginii... altfel veți ajunge cu conținut duplicat - ceea ce este rău pentru SEO (contează doar dacă aceste pagini sunt publice și indexate).

De asemenea, aș opta pentru author.php al temei sau permalink %author% în cazul în care sunt utilizatori obișnuiți WordPress. Puteți accesa datele despre autor astfel:

$author = get_user_by('slug', $author_name);
$author_id = (int)$author->ID;
$name = $author->first_name.' '.$author->last_name;

WP Codex: get_user_by()

5 dec. 2012 11:47:20
1
-1

Dacă am înțeles corect ceea ce ai spus, soluțiile posibile sunt aici:

Pentru prima parte, poți folosi plugin-ul WordPress Redirection pentru a-ți satisface nevoile cu ușurință.

Pentru a doua parte, poți folosi %author% pentru structurile de legături permanente. Verifică în codex.

21 nov. 2011 11:23:27
Comentarii

Putem face asta fără un plugin, deoarece nu sunt în favoarea utilizării plugin-urilor când lucrurile pot fi realizate cu unele modificări.

Umesh Awasthi Umesh Awasthi
21 nov. 2011 15:45:59