Supporto » Funzionalità = Plugin » riscrittura URL in base al cookie

  • Ciao!
    ho realizzato un plugin che oltre ad aggiungere “N” custom post type genera un sistema di separazione geografica dei contenuti di tutto il sito in base ad una lista di città che vengono memorizzate in una tabella apposita. Una volta fatta la scelta dalla landing page del sito, viene memorizzato un cookie nel browser dell’utente con l’id della città scelta e questa scelta viene usata in tutte le pagine del sito (nei miei template custom) per selezionare solo i post relativi a quella città (tramite meta_query).
    Tutto funziona perfettamente… l’unico problema è che mi trovo a dover diversificare l’url di ogni città per motivi di SEO e per l’utilizzo di un plugin di cache, altrimenti le pagine di “citta1” saranno sempre uguali a “citta2” da questi due punti di vista. In pratica devo riscrivere gli url in questa maniera:
    http://www.nomedominio.it/citta1/qualsiasi cosa…
    http://www.nomedominio.it/citta2/qualsiasi cosa…
    dopo aver letto dal cookie in quale città sono…

    Ho provato ad aggiungere tante custom rewrite rules quante sono le città nella tabella ma non riesco a portarmi dietro il prefisso “cittax” mentre navigo nel sito…
    Sapete aiutarmi?!?!?

    Grazie!!!

Stai visualizzando 7 risposte - dal 1 al 7 (di 7 totali)
  • Salve,

    • quali sono le regole che attualmente hai impostato con mod_rewrite?
    • “ma non riesco a portarmi dietro il prefisso “cittax””: ovvero che accade invece?

    Saluti,
    Diego

    Chi ha creato la discussione zuccamonna

    (@zuccamonna)

    Ciao, intanto grazie per la risposta…

    per quanto riguarda mod rewrite del file htaccess, sono quelle standard di wordpress quando nella sezione permalink imposti il formato “nome-articolo”.

    Per quanto riguarda le regole di riscrittura del wp_rewrite di wordpress, ho provato ad impostare qualcosa ma in maniera inconcludente perchè ottenevo sempre un 404. In pratica, anche dopo aver letto alcuni articoli sul modulo wp_rewrite di WP, non ho una strategia da applicare e non so come muovermi.
    Mi servirebbe proprio un suggerimento su come implementare questa
    – nuova regola di riscrittura di WP (add_rewrite_rule ?)
    – se aggiungere un rewrite_tag relativo /add_rewrite_tag ?)
    – se utilizzare un metodo diverso

    In questo momento sto barcolando un po’ nel buio…

    Chi ha creato la discussione zuccamonna

    (@zuccamonna)

    up…

    Salve,

    sempre presumento che tu abbia mod_rewrite corettamente attivo, una parte del problema potrebbe essere risolta con

    add_action( 'init', 'city_rewrite_rules' );
    function city_rewrite_rules()
    {
        add_rewrite_rule(
            // regola regex per pescare la città
            'city/([^/]+)/?',
            // destinazione reale, ad esempio la pagina città, adatta l'url alle tue necessità
            'index.php?pagename=citta&nome_citta=$matches[1]',
            // priorità della regola, top o bottom
            'top' );
    }

    Usando il formato
    http://www.nomedominio.it/city/cittaX/qualsiasicosa
    ti è più facile utilizzare i permalink senza dover rigenerare di volta in volta le regole in base alle città generate. Ovviamente invece di city puoi mettere qualcosa di più generico ma almeno così definisci che quello che sta sotto “city/” segue la tua regola e che la stringa appena dopo è la stringa che ti serve.

    Ricorda inoltre che devi dire a WordPress che c’è una nuova variabile da tenere in considerazione, ovvero come da esempio nome_citta e quindi

    add_filter( 'query_vars', 'city_query_vars' );
    function city_query_vars( $query_vars )
    {
        $query_vars[] = 'nome_citta';
        return $query_vars;
    }

    Ricordati che se non aggiorni i permalink quando modifichi queste regole (andando sulle impostazioni -> permalink -> salva) non avviene il reflush dei permalink e quindi il sistema non è aggiornato sulle nuove regole da seguire.

    Saluti,
    Diego

    Chi ha creato la discussione zuccamonna

    (@zuccamonna)

    Ciao, grazie per la risposta
    però mi chiedo una cosa… l’esempio che hai postato è abbastanza generico e non so se può risolvere il mio problema…
    I due punti fondamentali sono infatti che:
    – la città deve essere letta dal cookie lato utente
    – non posso mettere la radice /city/ prima di cittaX perchè tutto il sito sarebbe sotto quella radice…
    Io devo poter aggiungere cittaX ad quasi ogni url del sito.
    Inoltre, in riferimento alla seconda parte, quella delle query vars, ricordo che le interrogazioni già funzionano perfettamente… l’unico problema è l’url
    Sono riuscito ad essere più chiaro?

    Direi di si,

    per la parte di cookie puoi pescare dal cookie con una regola come la seguente (da adattare)

    RewriteCond %{HTTP_COOKIE} ^.*citta=([^;]+)
    RewriteCond %{REQUEST_URI} !^%1
    RewriteRule (.*) /%1/$1 [R=301,L]

    ovvero
    – se c’è il cookie citta (e lo salvo in %1 )
    – e la condizione è che la uri non inizia con quella città
    – redirigi su /nomecitta/resto dei parametri con 301 e termina l’elaborazione delle regole

    Tieni presente che probabilmente devi evitare dei self loop ma devi fare dei test con la seconda condizione ed essere sicuro che wordpress possa gestire quel indirizzo (un 404 potrebbe innescare un redirect loop se non è definito un documento/uri per gli errori).

    Per la seconda parte invece puoi modificare la regola del add_rewrite_rule cambiando la regex e levando la parte radice e mettendo bottom in modo che viene eseguita se non ci sono regole precedenti su altri contenuti.

    Spero questi spunti possano esserti d’aiuto, sicuramente ci sono test e adattamenti da fare.
    Prova con file statici se le regole funzionano (crea una struttura di cartelle e file che dovrebbero funzionare e gioca un po’ con le regole, evitando condizioni 404).
    Quando questo funziona prova con wordpress a fargli intercettare come detto le regole e visualizzare la pagina corretta.

    Saluti,
    Diego

    Chi ha creato la discussione zuccamonna

    (@zuccamonna)

    Grazie, questo tuo suggerimento è molto importante… adesso mi metterò a fare delle prove per capire come implementare tutto.
    Grazie mille!!

Stai visualizzando 7 risposte - dal 1 al 7 (di 7 totali)
  • Il topic ‘riscrittura URL in base al cookie’ è chiuso a nuove risposte.