Come rendere diversi i siti WordPress per geografia

Un approccio ai siti geografici di WordPress

Per lanciare una rete globale di siti poco costosi gestita da volontari che fornissero agli acquirenti negozi classificati in negozi locali, avevo bisogno di sfruttare la potenza di WordPress con alcune insolite personalizzazioni e soluzioni alternative. Esistono numerosi approcci per fornire esperienze locali con WordPress. In questo tutorial, ti mostrerò perché e come abbiamo deciso di creare una soluzione personalizzata.

A luglio, ho lanciato una guida globale alle alternative basate su Internet per lo shopping su Amazon chiamato FleetheJungle.com e la risposta è stata eccellente. Abbiamo ricevuto molta copertura mediatica e traffico successivo. Non è un'app basata su database; invece abbiamo sfruttato il tema eccezionale della Knowledge Base di KnowHow:

Ma per far crescere il sito, avevamo bisogno di offrire versioni geografiche per le singole città. Sicuramente il sito globale aiuta i visitatori a cancellare le loro prime iscrizioni o trovare alternative ai libri Kindle, ma non c'era nulla che incoraggiasse le persone a sostenere le piccole imprese nelle loro comunità. 

Per iniziare, costruiremmo una guida per gli acquirenti locali nella vicina Portland, una città con un'eredità orgogliosa di piccole imprese indipendenti e stravaganti.

Credit: Forest and Waves Portland Mappa di Edward Juan.

La sfida tecnica

Certamente, ho scritto abbastanza sul lancio rapido di una miriade di siti Web WordPress usando ricette preconfigurate e pre-ottimizzate, ma mantenere i relativi requisiti per una rete può essere estremamente dispendioso in termini di tempo: cose come la gestione di SEO, WordPress e aggiornamenti di plugin, ecc.. 

Ho anche considerato WordPress Multisite ma anche se lo so lei è cresciuto molto, abbiamo avuto un numero di accoppiamenti difficili e difficili e probabilmente non abbiamo mai avuto intenzione di stare insieme. Una volta coinvolto con "lei", è molto difficile rompere.

Avevo bisogno di una soluzione più semplice.

In questo tutorial, ti guiderò attraverso le personalizzazioni e i trucchi che ho utilizzato con WordPress e il mio tema della knowledge base per lanciare la nostra guida allo shopping di Portland e facilitare il lancio di qualsiasi numero di altre città, evitando il sovraccarico di gestione di dozzine o centinaia di siti.

I requisiti della rete geologica

Ecco alcuni dei requisiti di base per l'avvio di più siti:

1. Mantenere un sito mondiale. Volevo mantenere intatto il dominio primario globale, fleethejungle.com, privo di articoli locali, ma invece una guida per le nostre città disponibili.

2. Localizza per sottodominio. Volevo contenuti localizzati per sottodominio. Ad esempio, una visita a http://portland.fleethejungle.com promuoverà i contenuti locali sul sito mentre si riutilizzeranno alcune specifiche categorie di siti nazionali relativi agli acquisti su Internet più ampia, ad es. streaming video (non esiste alcuna alternativa basata su Portland a HBO Now). CraigsList fornisce un buon modello per questo.

3. Integrazione tra locale e mondiale. Volevo offrire ai visitatori locali una spiegazione delle differenze tra il loro sito locale e il sito globale, incoraggiandoli a partecipare per migliorare gli annunci nella loro città.

4. Volontariato gestiti. Volevo semplificare l'aggiunta regolare di città al sito in un modo che richiedesse solo volontari con abilità di blogging di base da avviare e mantenere. Ci sono troppi requisiti per lanciare nuovi siti WordPress per ogni singola città per farlo facilmente con i volontari.

5. Manutenzione minima. Infine, volevo mantenere la manutenzione della rete del sito semplice come eseguire un singolo sito.

Esaminiamo alcuni degli approcci tecnici che vengono spesso utilizzati per soddisfare questo tipo di requisiti.

Approcci tecnici

Per la gestione dei contenuti, ho pensato a tre approcci di base:

  1. Esegui diverse installazioni di WordPress.
  2. Usa WordPress Multisite per eseguire vari siti.
  3. Personalizza WordPress per filtrare dinamicamente il contenuto per la geografia.

Come ho detto prima, non sono un fan di Multisite e volevo evitare la complessità dell'avvio e del mantenimento di una varietà di siti WordPress. Un sito come Flee the Jungle avrebbe così tanto contenuto centrale che avrebbe bisogno di essere riutilizzato attraverso le pagine di città (come ad esempio come terminare l'abbonamento Prime), e non volevo dover mantenere questo contenuto attraverso diverse installazioni di WordPress -o scrivere codice per farlo.

Ho deciso di filtrare il contenuto in base al dominio o sottodominio utilizzato dal visitatore nel browser.

Se hai letto il mio tutorial Come utilizzare le mappe di quartiere di Zillow e la geolocalizzazione HTML5, sai come utilizzare la geolocalizzazione basata su browser HTML5 per determinare dove si trova un utente. Tuttavia, volevo che l'utente avesse più controllo.

Volevo che l'utente usasse un sottodominio come quello che ha lavorato per anni con CraigsList per guidarli nella loro città.

Ma il dominio di WordPress sugli URL assoluti rende tutto questo difficile. Quando ho iniziato a sperimentare con il monitoraggio del sottodominio in entrata per una città e di mapparlo ai collegamenti sulla pagina, mi sono imbattuto nell'abitudine di WordPress di creare collegamenti assoluti quasi ovunque. Un collega con cui ho parlato di questo ha riso subito quando gli ho chiesto: è un nemico comune degli sviluppatori di WordPress.

In questo tutorial, condividerò le personalizzazioni all'interno delle query basate sul PHP del nostro tema per creare i nostri siti basati sulla città e come alla fine abbiamo risolto il problema dell'URL assoluto.

Personalizzazione di WordPress per Geolocal

Ecco come ho deciso di implementare siti basati sulla città per Flee the Jungle che potrebbero essere facilmente mantenuti e creati dai blogger locali senza competenze tecniche aggiuntive.

Utilizzo del tagging con sottodomini

Gli articoli scritti per le città sarebbero contrassegnati dal nome della città, ad es. "Portland". Gli articoli per il sito globale sarebbero contrassegnati "in tutto il mondo". Volevo la possibilità di includere articoli in tutto il mondo sugli store basati su Internet per alcune categorie in cui c'era un supporto locale meno efficace come lo streaming video. Altre categorie sono certamente appropriate per concentrarsi esclusivamente su negozi locali come generi alimentari, negozi di automobili e negozi di giocattoli. 

Home Page Geolocal di una città

Per i siti geografici, manteniamo attive le categorie mondiali e mostriamo solo articoli diversi per le categorie appropriate a livello locale. In futuro, aggiungeremo articoli in tutto il mondo alle scelte locali all'interno di una categoria, quando appropriato.

Quando i visitatori visualizzano le pagine di categorie e le ricerche, filtriamo e personalizziamo anche i risultati in base a queste scelte di progettazione.

Variabili definite

Per fare ciò, definiamo le matrici all'interno del tema con i loro ID:

  • elenco di categorie per tutto il mondo
  • elenco delle categorie per le città locali
  • elenco delle città attive e dei relativi prefissi dei sottodomini

Ecco alcuni esempi. Innanzitutto, ecco la mia serie di ID di categoria (non locali) in tutto il mondo:

// ID di categoria che sono in tutto il mondo, digitale da visualizzare senza modifiche // ad es. Per iniziare, Prime e Smile Alternative, Streaming Media, ecc. $ Nonlocal_category_ids = [1,22,29,30,46,57,60,195]; 

Puoi recuperare quelli dall'osservare l'ID di categoria nell'elenco di categorie dashboard (passando con il mouse sopra il nome della categoria come mostrato più avanti con i tag):

In alternativa, modifica la categoria e acquisisci l'ID dall'URL di modifica (Iniziare è 29):

Ecco gli ID dei tag per Seattle e Portland:

// Tag ID per i nomi di città, ad es. Seattle, Portland $ known_cities = array (49,211); 

Seattle è 49. Puoi vedere l'ID del tag passando con il mouse sopra la città e lasciando che la barra di stato lo riveli:

Utilizzo del sottodominio su geotarget

Per ottenere il dominio o sottodominio, ho usato il suggerimento WordPress di Trevor Scott e l'ho inserito all'interno delle funzioni.php del mio tema.

Ecco l'editor di temi di WordPress Dashboard:

E, ecco il codice di Trevor:

/ ** * @author Trevor Scott  * @version 1.0 2010-12-07 * https: //wordpress.org/support/topic/how-do-i-get-sub-domain-name * Prendi la parte del sottodominio dell'URL. Se non ci sono sottodomini, il dominio root * viene restituito. Per impostazione predefinita, questa funzione * restituisce * il valore come una * stringa. Chiamando la funzione con echo = true stampa direttamente la risposta su * lo schermo. * * @param bool $ echo * / function arrested_subdomain ($ echo = false) $ hostAddress = explode ('.', $ _SERVER ["HTTP_HOST"]); if (is_array ($ hostAddress)) if (eregi ("^ www $", $ hostAddress [0])) $ passBack = 1;  else $ passBack = 0;  if ($ echo == false) return ($ hostAddress [$ passBack]);  else echo ($ hostAddress [$ passBack]);  else return (false); 

Pagina iniziale globale

Quando i visitatori arrivano alla home page globale, il dominio sarà fleethejungle.com piuttosto che un sottodominio. Ho creato un'altra funzione, configure_geolocal (), che viene chiamato all'inizio del file template.php. Ecco la prima parte della funzione: 

function configure_geolocal () global $ nonlocal_category_ids; $ globali note_cities; globale $ dominio_locale; global $ logo_image_url; // Tag ID per i nomi di città, ad es. Seattle, Portland $ known_cities = array (49,211); // ID di categoria che sono in tutto il mondo, digitale da visualizzare senza modifiche // ad es. Per iniziare, Prime e Smile Alternative, Streaming Media, ecc. $ Nonlocal_category_ids = [1,22,29,30,46,57,60,195]; $ domain_locale = arrested_subdomain (); if ($ domain_locale == 'www' o $ domain_locale == 'fleethejungle') $ domain_locale = false;

Ecco come viene chiamato get_header () all'interno del tema header.php:

  >     

Quando il dominio è globale, $ domain_locale sarà falso In queste circostanze, escluderò articoli taggati localmente dalle città. E lo farò sulla home page e sulla pagina delle categorie. Quando il dominio si riferisce a una città locale, $ domain_locale rappresenterà il prefisso, ad es. Seattle o Portland.

Nella home page del tema, se il visitatore si trova nel sito mondiale (dominio principale), escludo gli articoli taggati con città dal $ st_cat_post_args array. Tuttavia, se il visitatore si trova su una pagina della città e il sottodominio è noto, vengono visualizzati solo articoli locali nella maggior parte delle categorie tranne quelli identificati per nonlocal_category_ids, quelli più appropriati per contenuti non locali come lo streaming video:

$ globali note_cities; globale $ nonlocal_category_ids; globale $ dominio_locale; if ($ domain_locale === false) // root visita $ st_cat_post_args ['tag__not_in'] = $ known_cities;  else // la città locale viene visualizzata ma include articoli internazionali in questa categoria se (in_array ($ st_category-> term_id, $ nonlocal_category_ids) $ st_cat_post_args ['tag_slug__in'] = array ($ domain_locale, 'worldwide'); else // mostra solo articoli locali $ st_cat_post_args ['tag_slug__in'] = array ($ domain_locale);

Ecco il codice nel contesto di più della funzione:

// Elenca i post $ st_cat_post_num = of_get_option ('st_hp_cat_postnum'); $ st_posts_order = of_get_option ('st_hp_cat_posts_order'); $ globale post; // Se show posts è 0 non fare nulla se ($ st_cat_post_num! = 0) // Elencato per popolare? if ($ st_posts_order == 'meta_value_num') $ st_cat_post_args = array ('numberposts' => $ st_cat_post_num, 'orderby' => $ st_posts_order, 'meta_key' => '_st_post_views_count', 'category__in' => $ st_category-> term_id);  else $ st_cat_post_args = array ('numberposts' => $ st_cat_post_num, 'orderby' => $ st_posts_order, 'category__in' => $ st_category-> term_id);  global $ note_cities; globale $ nonlocal_category_ids; globale $ dominio_locale; if ($ domain_locale === false) // root visita $ st_cat_post_args ['tag__not_in'] = $ known_cities;  else // la città locale viene visualizzata ma include articoli internazionali in questa categoria se (in_array ($ st_category-> term_id, $ nonlocal_category_ids) $ st_cat_post_args ['tag_slug__in'] = array ($ domain_locale, 'worldwide'); else // mostra solo articoli locali $ st_cat_post_args ['tag_slug__in'] = array ($ domain_locale); $ st_cat_posts = get_posts ($ st_cat_post_args); echo '
    '; foreach ($ st_cat_posts come $ post): setup_postdata ($ post); ?>
  • ">
  • ';

Personalizzazione del comportamento delle pagine di elenco di categorie

Con il tema KnowHow, i visitatori possono anche fare clic sulle intestazioni delle categorie, portandole a un elenco di articoli all'interno della categoria.

Se sono sul sito globale, voglio mostrare solo articoli globali. Ho scelto di etichettare tutti gli articoli globali come "in tutto il mondo" per facilitare questo.

Quindi per il sito globale, mostro solo gli articoli taggati "in tutto il mondo" e per i siti delle città locali, mostro solo gli articoli taggati per quella città. Se la categoria è un caso eccezionale per entrambi, includiamo articoli della città attuale e di tutto il mondo. 

Ecco il codice all'interno del category.php del tema:

  

Non sto personalizzando la query qui perché le prestazioni non sono attualmente un grosso problema. Sto solo saltando i risultati fuori dal contesto e non li visualizzo.

In futuro, potrei personalizzare ulteriormente questo per i siti di città visualizzando risultati in tutto il mondo nella parte inferiore della pagina di categoria in una sezione distinta.

Personalizzazione della ricerca

È anche importante eseguire questo tipo di personalizzazioni per la ricerca. Il tema KnowHow fornisce un risultato di ricerca AJAX o una pagina di risultati generati. Dobbiamo fornire il codice per personalizzare ciascuna opzione.

Live AJAX Search

Per la ricerca dal vivo, non c'è get_header () chiama così abbiamo bisogno di configurare la nostra posizione in modo dinamico:

 

Quindi integriamo la stessa logica utilizzata nelle pagine delle categorie all'interno dei risultati di ricerca live:

// controlla se una delle sue categorie è esclusa dal locale $ category_excluded = false; foreach ((get_the_category ()) as $ category) if (in_array ($ category-> cat_ID, $ GLOBALS ['nonlocal_category_ids'])) $ category_excluded = true; rompere;  if ($ GLOBALS ["domain_locale"]! == false && has_tag ($ GLOBALS ["dominio_locale"]) || ($ category_excluded && has_tag ('worldwide')))) ?> 
  • //#FAQ-"> ">
  • //#FAQ-"> ">
  • Pagina dei risultati di ricerca dinamica

    Se non è AJAX, allora get_header () è chiamato per noi ed è un po 'più semplice:

     cat_ID, $ GLOBALS ['nonlocal_category_ids'])) $ category_excluded = true; rompere;  if ($ GLOBALS ["domain_locale"]! == false && has_tag ($ GLOBALS ["dominio_locale"]) || ($ category_excluded && has_tag ('worldwide'))) get_template_part ('content', get_post_format () );  else if ($ GLOBALS ["dominio_locale"] === false && has_tag ("worldwide")) get_template_part ('content', get_post_format ()); ?> 

    Come accennato in precedenza per le Categorie, potrei decidere di personalizzare i risultati di ricerca per visualizzare una seconda sezione di risultati per articoli globali sui siti di città.

    Approcci al contenuto

    Per fornire ai visitatori locali una spiegazione delle differenze tra il loro sito locale e il sito globale, incoraggiandoli a contribuire a migliorare le inserzioni nella loro città, ho utilizzato un plug-in che ho scritto a gennaio 2015 per Envato Tuts +: I vantaggi dell'utilizzo del Shortcoder Plugin gratuito. È un plug-in che consente di utilizzare le macro essenzialmente per espandere il contenuto HTML riutilizzabile in atto. Per ogni articolo di città, lo stiamo usando per personalizzare ciò che i visitatori locali vedono quando arrivano da Portland.

    Una volta installato il plugin, ho creato uno shortcode per ogni città come [Sc: PDX] che fornisce una semplice descrizione nella parte superiore delle pagine di articoli locali:

    Quindi, ogni volta che aggiungevamo un articolo locale, includevamo lo shortcode [Sc: PDX] in cima:

    Ecco come appare l'articolo quando arrivano i visitatori:

    Superare collegamenti assoluti

    Sono un utente di vecchia data di Digital Ocean ma sto diventando anche un fan più entusiasta di WP Engine; hosting ben gestito offre vantaggi in alcune circostanze. Si è scoperto che WP Engine offriva una soluzione al problema dell'URL assoluto di WordPress che era migliore delle alternative.

    WP Engine offre un filtro di post-elaborazione in cui è possibile utilizzare espressioni regolari per modificare il codice. Dopo aver considerato altri approcci per modificare WordPress e utilizzare le proprie API per questo, ho deciso che sarebbe stato più semplice sostituire semplicemente i collegamenti assoluti a FleeTheJungle.com con gli indirizzi relativi. Ciò ha consentito agli utenti che visitano un sottodominio basato sulla città di rimanere all'interno del sito geolocal:

    Prima di configurarlo, le visite al sottodominio Portland Flee the Jungle avevano collegamenti in uscita per la flotta globale di jungle.com disseminati nelle pagine. Dopo averlo configurato, i collegamenti in uscita rimanevano coerenti con il dominio o sottodominio in entrata.

    Essenzialmente, ho usato il filtro di post-elaborazione per eliminare gli URL assoluti e consentire all'URL del browser e agli indirizzi relativi di guidare la navigazione.

    Elenchi di città

    Per fornire un elenco delle città in cui Flee the Jungle è e diventerebbe disponibile, ho creato una pagina che elenca le città in cui gli utenti globali possono entrare. Lo uso anche per attirare i volontari a lanciare siti per le loro città.

    La funzione Configure_Geolocal () completata

    Ecco il codice finale che abbiamo usato all'interno di WordPress per configure_geolocal ():

    function configure_geolocal () global $ nonlocal_category_ids; $ globali note_cities; globale $ dominio_locale; global $ logo_image_url; // Tag ID per i nomi di città, ad es. Seattle, Portland $ known_cities = array (49,211); // ID di categoria che sono in tutto il mondo, digitale da visualizzare senza modifiche // ad es. Per iniziare, Prime e Smile Alternative, Streaming Media, ecc. $ Nonlocal_category_ids = [1,22,29,30,46,57,60,195]; $ domain_locale = arrested_subdomain (); if ($ domain_locale == 'www' o $ domain_locale == 'fleethejungle') $ domain_locale = false; $ logo_image_url = '/wp-content/uploads/2015/10/ftj-logo-global.gif';  else if ($ domain_locale == 'pdx' o $ domain_locale == 'portland') $ domain_locale = 'portland'; $ logo_image_url = '/wp-content/uploads/2015/10/ftj-logo-portland.gif';  else if ($ domain_locale == 'sea' o $ domain_locale == 'seattle') $ domain_locale = 'seattle'; $ logo_image_url = '/wp-content/uploads/2015/10/ftj-logo-seattle.gif';  else // città sconosciuta - reindirizza wp_redirect ('http://fleethejungle.com/cities'); Uscita; 

    Requisiti vari

    Personalizzazione del logo    

    Naturalmente, volevo implementare la personalizzazione di base del logo a seconda del sottodominio. Il tema KnowHow non supporta questo in modo nativo.

    Se si nota nel finale configure_geolocal () codice, ho impostato un URL della libreria multimediale per i loghi di ciascuna città.

    Quindi, il codice all'interno di header.php personalizza l'URL del logo del tema in base al dominio qui:

     

    "href =""> <?php bloginfo( 'name' ); ?>">

    Hosting di domini e sottodomini

    La mappatura del dominio di WP Engine può essere un po 'confusa per chi non lo sapesse. Devi aggiungere domini per il tuo sito e associarli al sistema di indirizzamento interno di WP Engine. Se si desidera che i sottodomini funzionino correttamente, è necessario configurare singolarmente ciascun sottodominio dalla dashboard dei domini di WP Engine..

    Mi ci è voluto un po 'per capire. Qui aggiungo una pagina di arrivo segnaposto per San Francisco, che può essere raggiunta da sanfrancisco.fleethejungle.com o sfbay.fleethejungle.com. WP Engine semplifica l'impostazione di questi reindirizzamenti:

    Ecco una visione preliminare dei domini configurati per la Flee the Jungle globale e locale:

    Sfortunatamente, città a cui non si aggiunge esplicitamente il reindirizzamento a un errore 404 su WP Engine. Ci sono altri modi per aggirare questo problema, ma per il momento sto solo aggiungendo città più grandi alla configurazione lì. Le persone saranno generalmente indirizzate alla home page globale o a una città preesistente, da lì, potranno offrirsi come volontari per iniziare la propria città.

    Altri problemi

    L'ottimizzazione interna del motore di ricerca di Google è ben nota per essere abbastanza segreta, tuttavia gran parte del traffico di referral che il tuo sito riceve dipende da esso. 

    Alcuni dei nostri contenuti verranno visualizzati su più domini, ma gran parte di essi saranno distinti a seconda della città in cui navighiamo. A Google non piace vedere lo stesso contenuto su più siti, ma è anche utile per indicizzare sottodomini separatamente. 

    Francamente, non ho idea di come il modello di rete geologica di Flee the Jungle verrà ricevuto e classificato all'interno del suo grande megaplex di supercomputer. Questa è una priorità più bassa per me al momento. La base del traffico di Flee the Jungle è il sostegno di base e la condivisione sociale.

    In chiusura

    Si prega di confrontare le differenze di contenuto tra la Flee the Jungle in tutto il mondo e il sito della città di Portland:

    Certamente, ci sono diversi modi in cui avrei potuto affrontare la sfida di creare siti geografici. Tuttavia, Flee the Jungle rimane uno sforzo volontario: avevo bisogno di una soluzione che fosse semplice e veloce, rendendo più facile aggiungere città, sfruttando i blogger come volontari. L'approccio che ho descritto ha raggiunto rapidamente questi obiettivi.

    Il risultato di questa personalizzazione è che abbiamo una singola installazione WordPress in grado di eseguire centinaia di varianti geografiche del nostro sito, con contenuti locali e internazionali adeguatamente filtrati e organizzati. Soprattutto, i volontari possono costruire e lanciare città con le sole competenze di base di un blogger WordPress. Questo è molto più semplice e più veloce del mio multi-sito WordPress "amico" o esecuzione di installazioni separate. Il futuro è relativamente illimitato.

    Spero ti sia piaciuto questo tutorial e mi piacerebbe sentire come avresti potuto affrontare questa sfida. Se desideri avviare una guida allo shopping per la tua città, contattaci. Se sei interessato a costruire un sito come questo, ho scritto un dettagliato tutorial passo passo per creare il tuo sito web di knowledge base su WordPress. Diciamo che vuoi lanciare il tuo sito di fan di Harry Potter: è una facile guida per iniziare.

    Non esitate a postare le vostre domande e commenti qui sotto. Puoi anche contattarmi su Twitter @reifman o scrivermi direttamente via email. Puoi anche sfogliare la mia pagina Envato Tuts + istruttore per vedere altri tutorial che ho scritto.

    Link correlati

    • Portland Flee the Jungle
    • Come utilizzare le mappe di quartiere di Zillow e la geolocalizzazione HTML5