Mappare più URL sulla stessa pagina

20 nov 2011, 17:48:29
Visualizzazioni: 23.1K
Voti: 5

Mi sono imbattuto in questa pagina con requisiti molto simili ai miei

Più endpoint sulla stessa pagina

Devo ottenere la stessa funzionalità ma voglio anche passare alcuni parametri alla pagina dove verranno mappati tutti questi URL. Per esempio:

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

Voglio mapparli allo stesso URL

http://mysite.com/test/finalDestination

Insieme a questo voglio anche inviare altri parametri come:

  1. email utente
  2. nome utente

In modo da poterli utilizzare in quella pagina per la mia logica personalizzata. So come farlo in JSP/Java dove posso inviarli come parametri di richiesta in una richiesta POST e recuperarli nel JSP finale

Come posso ottenere questo in WordPress usando PHP. Preferisco non utilizzare stringhe di query.

Oppure è possibile creare URL del tipo:

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

dove user1 ecc. possono essere recuperati dal database e possiamo assicurarci che saranno univoci in tutta l'applicazione e mappare questi URL allo stesso endpoint. Come posso recuperare il nome utente nella mia pagina finale?

Grazie in anticipo

0
Tutte le risposte alla domanda 3
18

Puoi usare la stessa risposta della domanda a cui ti riferisci (io l'ho già risposta). Ecco come dovresti modificare per passare gli argomenti:

<?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');
    }
?>

Assumendo che 'finaldestination' rimanga sempre lo stesso, e il nome della pagina (slug) sia 'about' (puoi cambiare entrambi). Applica il tuo template personalizzato a questa pagina, e nel template, fai questo:

//se visiti http://.../test/finaldestination/name/romeo, allora $params sarà name/romeo. Puoi esploderlo e ottenere il valore.
$params = get_query_var('args');

Dopo aver inserito questo codice nel tuo file, vai semplicemente in Impostazioni>Permalink e premi il pulsante salva. Non ho provato questo codice specifico, ma ho usato qualcosa di simile in un progetto recente e sono sicuro che funzionerà.

22 nov 2011 18:09:25
Commenti

Grazie per l'input. Fondamentalmente ho una pagina con URL http://localhost/blog/wordpress/author/admin/ dove vengono mostrati i post relativi all'autore. Ho una pagina author.php dove sto usando una query personalizzata basata su alcuni parametri. Quindi tutto ciò che voglio è che se ho un autore con nome "my-author", l'URL dovrebbe essere http://localhost/blog/wordpress/author/my-author/ che dovrebbe mapparsi con "http://localhost/blog/wordpress/author/admin/" e posso usare "my-author" per interrogare il mio database e recuperare i suoi post. Non sono sicuro di quanto sia fattibile.

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

Ho provato il tuo codice come segue $wp->add_query_var('args'); add_rewrite_rule('author/(.*)','index.php?pagename=author&args=$matches[1]','top'); e quando ho provato ad accedere al seguente URL http://localhost/blog/wordpress/author/my-work/ mi dà un errore 404

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

Perché stai cercando di scrivere un URL del genere? WordPress ha già l'URL dell'archivio autore come questo. Quindi http://localhost/blog/author/my-author punterà sempre alla pagina dell'archivio per my-author. Inoltre, un motivo possibile potrebbe essere che author è un termine riservato nell'universo WP. Dovresti provare con qualche altro termine invece di author. E la slug della tua pagina è author?

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

Non sono sicuro di cosa intendi con slug della pagina come 'author', essendo nuovo alla piattaforma mi crea confusione. Il fatto è che questi autori saranno autori ospiti senza profilo memorizzato o non creeremo un account utente per loro, tutto ciò che possiamo fare è memorizzare un campo con il nome dell'autore nella sezione personalizzata del post e usarlo per recuperare i suoi post

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

Ohh... se sei nuovo alla piattaforma, allora non dovresti davvero metterti a modificare gli URL. Quello che stai cercando di fare richiederà molto più di una semplice regola di riscrittura degli URL! Un modo sarebbe aggiungere la chiave dei meta campi (diciamo il nome dell'autore) all'URL e poi ottenere i post che hanno questa meta chiave.

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

È proprio quello che sto cercando di ottenere.il mio tema ha già il file author.php quindi quello che sto cercando di ottenere è che se qualcuno digita l'URL ad esempio localhost/blog/wordpress/author/aum-kumar dovrei reindirizzare ogni URL con il modello localhost/blog/wordpress/author/ alla pagina author.php dove posso usare l'ultimo parametro come valore da cercare, quindi nel mio caso "aum-kumar" sarà il valore del meta campo ma finora non sono riuscito a ottenere questo

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

Non è necessario scrivere una nuova regola perché quello che vuoi esiste già. Quello che puoi fare è creare un account per l'autore ospite con il ruolo di Contributor, in modo che possa scrivere un articolo, ma non pubblicarlo. In questo modo, la sua pagina archivio sarà accessibile proprio come desideri, senza dover riscrivere alcun URL. Maggiori informazioni sui ruoli di WordPress: http://codex.wordpress.org/Roles_and_Capabilities

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

Concordo, ma ci sono alcuni autori che vogliono solo inviare il loro articolo e basta. Ho proposto la stessa soluzione ma è stata rifiutata, quindi sono costretto a cercare alternative.

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

continuiamo questa discussione in chat

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

@Moderatore Il sistema non mi permette di chattare, sembra che non abbia 20 punti reputazione sulla rete!

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

Sono presente nella chat, puoi scrivermi lì se ci sei

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

Ho già provato a chattare! Ma per qualche motivo non me lo permette!

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

è davvero triste, puoi indicarmi come posso ottenere questo risultato? Sono bloccato qui in qualche modo

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

La spiegazione completa è piuttosto lunga, ma ti darò alcuni suggerimenti. Innanzitutto, non usare il termine author, usa qualcos'altro quando scrivi la regola. Usa il parametro args per inviare un nome d'autore al tuo file template e ottenere e visualizzare i post usando questo nome.

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

ho provato con writer anche qualcosa come 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'); } ma ancora non funziona. Come nota a margine ho la pagina author.php come pagina personalizzata nella directory del mio tema ma ricevo ancora 404

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

Dovrai cambiare anche lo slug della pagina! Modifica la pagina a cui hai applicato il template e cambia lo slug in writer. Poi in questa regola, cambia pagename=author in pagename=writer. Dopodiché, vai in Impostazioni>Permalink e semplicemente clicca salva.

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

Ho capito cosa mi hai detto. Non stavo creando una pagina dal pannello di amministrazione ma dopo aver creato una pagina e assegnato il mio template personalizzato, questa appare anche nella barra del menu. Posso chiedere a WordPress di non mostrarla nel menu/sottomenu? Non ho l'opzione per votare il tuo post, mi hai salvato la giornata :) grazie per il tuo aiuto finora

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

Prego! Felice di esserti stato utile! Potrai votare/accettare la mia risposta più tardi quando avrai abbastanza reputazione! :)

Rutwick Gangurde Rutwick Gangurde
26 nov 2011 14:18:38
Mostra i restanti 13 commenti
0

Assicurati di aggiungere un URL canonico nell'intestazione delle pagine duplicate, che punti all'istanza principale della pagina... altrimenti finirai con contenuti duplicati - il che è negativo per il SEO (importa solo se queste pagine sono pubbliche e indicizzate).

Suggerirei anche di utilizzare l'author.php del tema o il permalink %author% nel caso si tratti di utenti regolari di WordPress. Puoi accedere ai dati dell'autore in questo modo:

$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 dic 2012 11:47:20
1
-1

Se ho capito correttamente le tue esigenze, le possibili soluzioni sono qui:

Per la prima parte, puoi utilizzare il plugin WordPress Redirection per soddisfare facilmente le tue necessità.

Per la seconda parte, puoi usare %author% per le strutture dei permalink. Dai un'occhiata al codex.

21 nov 2011 11:23:27
Commenti

Possiamo farlo senza un plugin dato che non sono favorevole all'uso di plugin quando le cose possono essere fatte con alcune modifiche.

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