Come ottenere URL puliti con add_query_arg nei permalink

20 dic 2013, 10:55:20
Visualizzazioni: 18K
Voti: 10

Con add_query_arg() è comodo aggiungere parametri aggiuntivi a un URL ed è anche semplice creare una regola di rewrite. Fin qui tutto bene. Ma il problema è la sostituzione dell'URL effettuata da WordPress.

Quando ho un URL come:

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

e digito questo URL nella barra degli indirizzi del browser con i permalink attivati. Questo link diventerà:

www.esempio.com/nomepagina/?myvar=test

MA: quello che vorrei ottenere è:

www.esempio.com/nomepagina/test

Infine, vorrei usare codice come:

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

che dovrebbe risultare in:

www.esempio.com/nomepagina/test

Come posso ottenere questo risultato? Ho passato ore a leggere documentazione ma non sono riuscito a trovare una soluzione.

1
Commenti

Mi piacerebbe sapere come si fa. +1 alla domanda.

henrywright henrywright
27 dic 2013 23:04:20
Tutte le risposte alla domanda 3
0

Mi sono appena imbattuto nella stessa situazione e ho trovato questa domanda durante una ricerca su Google.

Sembra che non sia possibile. Il core stesso aggiunge semplicemente stringhe all'URL se i permalink ottimizzati sono abilitati, vedi https://core.trac.wordpress.org/browser/tags/3.9.1/src/wp-includes/link-template.php#L571

Per chiunque sia interessato a questo: puoi fare qualcosa del genere nel tuo codice:

if ( '' != get_option('permalink_structure') ) {
    // utilizzando permalink ottimizzati, aggiungi all'url
    $read = user_trailingslashit( get_permalink() . 'test' ); // www.example.com/pagename/test
  } else {
    $read = add_query_arg( 'test', '', get_permalink() ); // www.example.com/pagename/?test
  }

Questa soluzione è stata anche raccomandata da Jon Cave in un commento sul blog ufficiale make: https://make.wordpress.org/plugins/2012/06/07/rewrite-endpoints-api/#comment-686

10 lug 2014 20:14:30
1

La soluzione per WordPress sarebbe aggiungere regole di riscrittura per ottenere qualcosa del genere:

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

leggi di più: https://codex.wordpress.org/Rewrite_API/add_rewrite_rule

16 feb 2017 11:05:53
Commenti

Avresti dovuto renderlo più complicato da votare negativamente...

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

WordPress non ti permetterà di farlo facilmente. Infatti, le regole di riscrittura sono l'unica opzione per ottenere questo tipo di risultato in WordPress, e le regole di riscrittura di WordPress possono diventare davvero confuse quando il tuo sito cresce, perché plugin e temi (e anche tu) potrebbero aggiungere regole di riscrittura personalizzate sopra quelle esistenti nella tua installazione (multi)sito.

La soluzione di @swissspidy funzionerà se hai già una regola di riscrittura per la tua chiave (myvar) e stai utilizzando i permalink nella prima condizione, per poi ripiegare sui tradizionali query string in assenza di quelle condizioni. La soluzione di @Johnathan Joosten mostra come le regole di riscrittura possano diventare molto complesse in WordPress (immagina di farlo per tutte le tue chiavi e valori dei query string...)

Mi sono imbattuto in questo problema diverse volte mentre lavoravo a progetti di medie dimensioni per i miei clienti e sono riuscito a ottenere qualcosa di simile utilizzando un plugin chiamato Obfusquer. Secondo il sito web, maschera tutti i query string di WordPress con chiavi segrete definite dall'utente e fornisce anche hook per esigenze personalizzate avanzate.

Curiosamente, non è elencato nel repository dei plugin di WordPress, e penso che avrai bisogno di un abbonamento (che ritengo sia davvero accessibile visto che una singola licenza funzionerà anche in installazioni multisito) ma ecco un link ad esso se hai bisogno di mascherare/nascondere i query string nelle installazioni di WordPress. Hanno anche una documentazione qui.

Ora utilizzo questo plugin in quasi tutti i miei progetti WordPress, spero che possa aiutarti anche te. Saluti.

27 nov 2019 12:23:06