Come ottenere graziosi URL con add_query_arg nei permalink


8

Con add_query_arg()esso è bello aggiungere parametri aggiuntivi a un URL ed è anche facile creare una regola di riscrittura. Fin qui tutto bene. Ma il problema è la sostituzione dell'URL effettuata da wordpress.

Quando ho un URL, come:

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

e scrivo questo URL nella riga dell'indirizzo del browser con permalink attivati. Questo link diventerà:

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

MA : quello che vorrei ottenere è:

www.example.com/pagename/test

Infine, vorrei usare un codice come:

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

che comporterebbe:

www.example.com/pagename/test

Come si può ottenere questo? Ho passato ore a leggere documenti e non sono riuscito a trovare una soluzione.


1
Mi piacerebbe sapere come è fatto. +1 alla domanda.
henrywright,

Risposte:


5

Ho appena affrontato la stessa situazione e inciampato su questa domanda mentre cercavo su Google.

Sembra che questo non sia possibile. Il core stesso aggiunge stringhe all'URL se sono abilitati permalink graziosi, 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') ) {
    // using pretty permalinks, append to 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 di make: https://make.wordpress.org/plugins/2012/06/07/rewrite-endpoints-api/#comment-686


0

WordPress non ti permetterà di farlo facilmente. In effetti, le regole di riscrittura sono la tua unica opzione per ottenere questo tipo di cose in WordPress e le regole di riscrittura di WordPress possono diventare davvero disordinate quando il tuo sito cresce perché plug-in e temi (e anche tu) possono aggiungere regole di riscrittura personalizzate sopra le regole esistenti nel tuo (multi ) installazione del sito.

La soluzione @swissspidy funzionerà se disponi già di una regola di riscrittura per la tua chiave (myvar) e stai utilizzando i permalink nella prima condizione e quindi il fallback alle stringhe di query tradizionali in assenza di tali condizioni. @Johnathan La soluzione Joosten mostra come le regole di riscrittura possano diventare molto complesse in WordPress (immagina di farlo per tutte le chiavi e i valori della stringa di query ...)

Ho incontrato questo problema alcune volte prima mentre stavo lavorando ad alcuni progetti di medie dimensioni per i miei clienti e sono stato in grado di ottenere qualcosa di simile usando un plugin chiamato Obfusquer. Secondo il sito Web, maschera tutte le stringhe di query di WordPress con chiavi segrete definite dall'utente e fornisce anche hook per requisiti personalizzati avanzati.

Divertente, non è elencato nel repository dei plugin di WordPress e penso che avrai bisogno di un abbonamento (che penso sia davvero conveniente poiché 1 singola licenza funzionerà anche nell'installazione su più siti) ma qui c'è un link se devi mascherare / nascondi stringhe di query nelle installazioni di WordPress. Hanno anche la documentazione qui .

Ora uso il plugin in quasi tutti i miei progetti wordpress, spero che aiuti le tue esigenze. Saluti.


-1

La soluzione di Wordpress sarebbe quella di aggiungere regole di riscrittura per creare 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


1
Avresti dovuto complicare la votazione ...
Vishal Kumar Sahu,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.