Cum să faci site-uri WordPress diferite de geografie

O abordare a siturilor geolocale WordPress

Pentru a lansa o rețea globală ieftină de site-uri administrate de voluntari care să ofere cumpărătorilor categorii de directoare către magazinele locale, trebuia să valorific puterea WordPress cu unele personalizări și rezolvări neobișnuite. Există o serie de abordări pentru a oferi experiențe locale cu WordPress. În acest tutorial, vă voi arăta de ce și cum am decis să facem o soluție personalizată.

În iulie, am lansat un ghid global pentru alternative la cumpărături de la Amazon, numit FleetheJungle.com, iar răspunsul a fost excelent. Am primit o mulțime de acoperire media și trafic ulterior. Nu este o aplicație bazată pe baze de date; în schimb, am valorificat tema bazei de cunoștințe remarcabile în KnowHow:

Dar pentru a crește site-ul, trebuie să oferim versiuni geolocale pentru orașele individuale. Desigur, site-ul global îi ajută pe vizitatori să-și anuleze primele calități de membru sau să găsească alternative la cărțile Kindle, dar nu a fost nimic de încurajat pe oameni să sprijine întreprinderile mici din comunitățile lor. 

Pentru început, vom construi un ghid pentru cumpărătorii locali din Portland din apropiere, un oraș cu o moștenire mândră de mici afaceri independente și mici.

Credit: Pădurea și valurile Portland Harta de Edward Juan.

Provocarea tehnică

Sigur că am scris destul despre lansarea rapidă a unei multitudini de site-uri WordPress care utilizează rețete pre-configurate, pre-optimizate, dar menținerea unor cerințe legate de o rețea poate fi extrem de consumatoare de timp - lucruri precum gestionarea SEO, WordPress și actualizarea pluginurilor etc.. 

Am considerat, de asemenea, WordPress Multisite, dar chiar dacă știu ea e au crescut o mulțime, am avut o serie de perechi greu de dificil și, probabil, nu au fost niciodată menite să fie împreună. Odată ce te implici în "ea", e foarte greu să te desparți.

Aveam nevoie de o soluție mai simplă.

În acest tutorial vă voi îndruma prin personalizările și trucurile pe care le-am folosit cu WordPress și tema bazei mele de cunoștințe pentru a lansa ghidul nostru de cumpărături Portland și pentru a facilita lansarea oricărui număr de alte orașe - evitând în același timp gestionarea a zeci sau sute de site-uri.

Cerințele rețelei geolocale

Iată câteva dintre cerințele de bază pentru lansarea mai multor site-uri:

1. Mențineți un site la nivel mondial. Am vrut să mențin domeniul global, fleethejungle.com intact, fără articole locale, ci un ghid pentru orașele noastre disponibile.

2. Localizați pe sub-domenii. Am vrut ca conținutul să fie localizat pe subdomenii. De exemplu, o vizită la http://portland.fleethejungle.com ar promova conținutul local pe site în timp ce reutilizați anumite categorii specifice de site-uri naționale legate de cumpărături pe Internet mai larg, de ex. streaming video (nu există nicio alternativă bazată pe Portland față de HBO Now). CraigsList oferă un bun model pentru acest lucru.

3. Integrarea între local și mondial. Am vrut să ofer vizitatorilor locali o explicație a diferențelor dintre site-ul lor local și site-ul global, încurajându-i să participe la îmbunătățirea înregistrărilor din orașul lor.

4. Voluntari-gestionate. Am vrut să ușurez adăugarea regulată a orașelor pe site într-un mod care să necesite numai voluntari cu abilități de bază în blogging pentru a le lansa și întreține. Există prea multe cerințe pentru a lansa noi site-uri WordPress pentru fiecare oraș în parte, pentru a face acest lucru cu voluntari.

5. Întreținerea minimă. În cele din urmă, am vrut să mențin întreținerea rețelei site-ului la fel de simplu ca și rulează un singur site.

Să explorăm câteva dintre abordările tehnice care sunt adesea folosite pentru a răspunde acestor tipuri de cerințe.

Abordări tehnice

Pentru gestionarea conținutului, există trei abordări de bază despre care m-am gândit:

  1. Rulați diferite instalații de WordPress.
  2. Utilizați WordPress Multisite pentru a rula diverse site-uri.
  3. Personalizați WordPress pentru a filtra dinamic conținutul pentru geografie.

Așa cum am spus mai devreme, nu sunt un fan Multisite și am vrut să evit complexitatea lansării și menținerii unei varietăți de site-uri WordPress. Un site cum ar fi Flee the Jungle ar avea atât de mult conținut central care ar trebui să fie reutilizat în paginile orașului (cum ar fi cum să-ți terminați calitatea de prim-membru) și nu am vrut să trebuiască să mențin acest conținut în diferite instalații WordPress - sau scrie codul pentru a face acest lucru.

Am decis să filtrez conținutul în funcție de domeniul sau subdomeniul folosit de vizitator în browser.

Dacă ați citit tutorialul meu Cum se utilizează Hărți de zăpadă Zillow și Geolocație HTML5, știți cum să utilizați geolocalizarea bazată pe browserul HTML5 pentru a determina unde este un utilizator. Cu toate acestea, am dorit ca utilizatorul să aibă mai mult control.

Am vrut ca utilizatorul să folosească un subdomeniu ca cel care a lucrat de ani de zile cu Craigslist, pentru ai îndruma spre orașul lor.

Dar dominatia WordPress asupra URL-urilor absolute face acest lucru dificil. Când am început să experimentez cu urmărirea subdomeniului de intrare pentru un oraș și să îl maprez pe link-uri de pe pagină, am fugit în obiceiul lui WordPress de a crea legături absolute aproape peste tot. Un coleg cu care am vorbit despre asta a râs imediat când l-am întrebat despre el - este un dușman comun al dezvoltatorilor WordPress.

În acest tutorial, voi împărți personalizările din interogările bazate pe tema noastră pentru a construi site-urile noastre bazate pe oraș și cum am lucrat în cele din urmă la problema cu adresa URL absolută.

Personalizarea WordPress pentru Geolocal

Iată cum am decis să pun în aplicare site-uri pe bază de oraș pentru Flee the Jungle, care ar putea fi ușor întreținute și autorizate de către bloggerii locali, fără alte abilități tehnice.

Folosind etichetarea cu subdomeniile

Articolele scrise pentru orașe vor fi etichetate cu numele orașului, de ex. "Portland". Articolele pentru site-ul global vor fi etichetate "în întreaga lume". Am dorit să includem articole despre articole despre magazinele bazate pe Internet pentru anumite categorii în care a existat un suport local mai puțin eficient, cum ar fi streaming video. Alte categorii sunt cu siguranță potrivite pentru a vă concentra exclusiv pe magazine locale, cum ar fi Magazine, Magazine auto și Magazine de jucării. 

Pagina de pornire Geolocal a unui oraș al orașului

Pentru site-urile geolocale, păstrăm categoriile la nivel mondial și afișăm articole diferite pentru categoriile adecvate la nivel local. În viitor, vom adăuga articole la nivel mondial la alegerile locale dintr-o categorie, dacă este cazul.

Atunci când vizitatorii vizualizează pagini de categorii și caută, filtrăm și personalizăm rezultatele pe baza acestor opțiuni de design.

Variabile definite

Pentru a face acest lucru, definim matricele în cadrul temei prin ID-urile lor:

  • lista categoriilor pentru întreaga lume
  • lista de categorii pentru orașele locale
  • lista orașelor active și prefixele subdomeniului acestora

Iată câteva exemple. Mai întâi, iată gama mea de ID-uri de categorii din întreaga lume (nonlocale):

// ID-uri de categorii care sunt la nivel mondial, digitale care vor fi afișate fără modificări // de ex. Noțiuni introductive, Alternative primare și zâmbitoare, Streaming Media etc. $ nonlocal_category_ids = [1,22,29,30,46,57,60,195]; 

Puteți să le recuperați de la o privire la categoria ID în lista categoriilor de tablouri de bord (plasând cu mouse-ul peste numele categoriei, după cum se arată mai jos cu etichete):

Sau editați categoria și apucați ID-ul de la URL-ul de editare (Noțiuni de bază este 29):

Iată ID-urile etichetelor pentru Seattle și Portland:

// ID-uri de etichete pentru numele orașelor, de ex. Seattle, Portland $ known_cities = array (49,211); 

Seattle este 49. Puteți vedea id-ul tag-ului plasându-l în jurul orașului și lăsându-l afișat bara de stare:

Utilizarea subdomeniului pentru a obține un obiectiv geografic

Pentru a obține domeniul sau subdomeniul, am folosit sfatul WordPress de la Trevor Scott și l-am plasat în funcțiile temei mele.php.

Iată WordPress Tema Editorul temei:

Și, iată codul lui Trevor:

/ ** * @ autor Trevor Scott  * @version 1.0 2010-12-07 * https: //wordpress.org/support/topic/how-do-i-get-sub-domain-name * Prindeți partea de subdomeniu a URL-ului. Dacă nu există un subdomeniu, domeniul rădăcină * este trecut înapoi. În mod implicit, această funcție * returnează * valoarea ca un șir *. Apelarea funcției cu ecou = true imprimă răspunsul direct la * ecran. * * @param bool $ echo * / funcția arrested_subdomain ($ echo = false) $ hostAddress = explode ('.', $ _SERVER ["HTTP_HOST"]); dacă is_array ($ hostAddress)) dacă (eregi ("^ www $", $ hostAddress [0])) $ passBack = 1;  altceva $ passBack = 0;  dacă ($ echo == false) return ($ hostAddress [$ passBack]);  altceva echo ($ hostAddress [$ passBack]);  altceva return (false); 

Pagina principală globală

Când vizitatorii ajung la pagina principală globală, domeniul va fi fleethejungle.com și nu un subdomeniu. Am creat o altă funcție, configure_geolocal (), care se numește la începutul fișierului header.php pentru șablon. Iată prima parte a funcției: 

funcția configure_geolocal () global $ nonlocal_category_ids; global $ known_cities; global $ domain_locale; global $ logo_image_url; // ID-uri de etichete pentru numele orașelor, de ex. Seattle, Portland $ known_cities = array (49,211); // ID-uri de categorii care sunt la nivel mondial, digitale care vor fi afișate fără modificări // de ex. Noțiuni introductive, Alternative primare și zâmbitoare, Streaming Media etc. $ nonlocal_category_ids = [1,22,29,30,46,57,60,195]; $ domain_locale = arrested_subdomain (); dacă ($ domain_locale == 'www' sau $ domain_locale == 'fleethejungle') $ domain_locale = false;

Iată cum se numește get_header () în cadrul temei header.php:

  >     

Când domeniul este global, $ domain_locale va fi fals. În aceste condiții, voi exclude articolele etichetate local de orașe. Și voi face acest lucru pe pagina de pornire și pe pagina de categorii. Când domeniul se referă la un oraș local, $ domain_locale va reprezenta prefixul, de ex. Seattle sau Portland.

În pagina de pornire a temei, în cazul în care vizitatorul se află pe site-ul mondial (domeniul rădăcină), exclud articolele etichetate cu orașe din $ st_cat_post_args matrice. Cu toate acestea, dacă vizitatorul se află pe o pagină a orașului și subdomeniul este cunoscut, afișăm numai articole locale în majoritatea categoriilor, cu excepția celor identificate pentru nonlocal_category_ids - cele mai potrivite pentru conținutul non-local, cum ar fi streaming video:

global $ known_cities; global $ nonlocal_category_ids; global $ domain_locale; dacă ($ domain_locale === false) // root vizitați $ st_cat_post_args ['tag__not_in'] = $ known_cities;  altceva // orașul local este vizionat, dar include articole din întreaga lume din această categorie dacă in_array ($ st_category-> term_id, $ nonlocal_category_ids) $ st_cat_post_args ['tag_slug__in'] = array ($ domain_locale, ' // afișați articole locale $ st_cat_post_args ['tag_slug__in'] = array ($ domain_locale);

Iată codul în contextul mai multor funcții:

// Mesaje din lista $ st_cat_post_num = of_get_option ('st_hp_cat_postnum'); $ st_posts_order = of_get_option ('st_hp_cat_posts_order'); postare globală $; // Dacă posturile de postare sunt 0 nu face nimic dacă ($ st_cat_post_num! = 0) // Listate de populare? dacă $ 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' termen_id);  altceva $ st_cat_post_args = array ('numberposts' => $ st_cat_post_num, 'orderby' => $ st_posts_order, 'category__in' => $ st_category-> termen_id);  global $ known_cities; global $ nonlocal_category_ids; global $ domain_locale; dacă ($ domain_locale === false) // root vizitați $ st_cat_post_args ['tag__not_in'] = $ known_cities;  altceva // orașul local este vizionat, dar include articole din întreaga lume din această categorie dacă in_array ($ st_category-> term_id, $ nonlocal_category_ids) $ st_cat_post_args ['tag_slug__in'] = array ($ domain_locale, ' // afișează doar articole locale $ st_cat_post_args ['tag_slug__in'] = array ($ domain_locale); $ st_cat_posts = get_posts ($ st_cat_post_args); echo '
    „; foreach ($ st_cat_posts ca $ post): setup_postdata ($ post); ?>
  • „>
  • „;

Personalizarea comportamentului paginilor cu afișări de categorii

Cu ajutorul temei KnowHow, vizitatorii pot face clic pe titlurile categoriei, ducându-i la o listă de articole din categorie.

Dacă se află pe site-ul global, vreau să arăt doar articole globale. Am ales să etichetez toate articolele globale ca fiind "la nivel mondial" pentru a facilita acest lucru.

Prin urmare, pentru site-ul global, afișez numai articole etichetate "în întreaga lume", iar pentru site-urile din orașele locale, afișez numai articole etichetate pentru acel oraș. Dacă categoria este un caz excepțional pentru ambele, vom include articole din orașul actual și din întreaga lume. 

Iată codul din categoria temei: php:

  

Nu fac personalizarea interogării aici, deoarece performanța nu este în prezent o problemă majoră. Doar sărind rezultatele din context și nu le afișez.

În viitor, pot personaliza acest lucru în continuare pentru site-urile orașului prin afișarea rezultatelor la nivel mondial în partea de jos a paginii categoriei într-o secțiune distinctă.

Personalizarea căutării

De asemenea, este important să efectuați aceste tipuri de personalizări pentru căutare. Tema KnowHow oferă un rezultat de căutare AJAX sau o pagină generată de rezultate. Trebuie să furnizăm codul pentru a personaliza fiecare opțiune.

Căutare AJAX live

Pentru căutarea live, nu există get_header () sunați astfel încât trebuie să configurați locația dinamic:

 

Apoi integram aceeași logică folosită în paginile categoriei în rezultatele căutării live:

// verificați dacă una dintre categoriile sale este exclusă din local $ category_excluded = false; foreach ((get_the_category ()) ca categorie $) if (in_array ($ category-> cat_ID, $ GLOBALS ['nonlocal_category_ids'])) $ category_excluded = true; pauză;  dacă ($ GLOBALS ["domain_locale"]! == false && has_tag ($ GLOBALS ["domain_locale"]) 
  • //#FAQ-„> „>
  • //#FAQ-„> „>
  • Pagina din rezultatele dinamice de căutare

    Dacă nu este AJAX, atunci get_header () este chemat pentru noi și este un pic mai simplu:

     cat_ID, $ GLOBALS ['nonlocal_category_ids']])) $ category_excluded = true; pauză;  ($ GLOBALS ["domain_locale"]! == false && has_tag ($ GLOBALS ["domain_locale"]) );  altceva if ($ GLOBALS ["domain_locale"] === false && has_tag ("în întreaga lume")) get_template_part ('content', get_post_format ()); ?> 

    După cum am menționat mai sus pentru categorii, pot decide să personalizez rezultatele căutării pentru a afișa oa doua secțiune a rezultatelor pentru articolele globale pe site-urile orașului.

    Abordări la conținut

    Pentru a oferi vizitatorilor locali o explicație a diferențelor dintre site-ul lor local și site-ul global, încurajându-i să participe la îmbunătățirea înregistrărilor din oraș, am folosit un plugin pe care l-am scris în ianuarie 2015 pentru Envato Tuts +: Beneficiile utilizării Free Plugin pentru Shortcoder. Este un plugin care vă permite să utilizați macrocomenzile în esență pentru a extinde conținutul HTML reutilizabil. Pentru fiecare articol din oraș, îl folosim pentru a personaliza ce vizionează vizitatorii locali atunci când sosesc din Portland.

    După instalarea pluginului, am creat un cod scurt pentru fiecare oraș, cum ar fi [Sc: pdx] care oferă o blurbă simplă în partea de sus a paginilor de articole locale:

    Apoi, ori de câte ori am adăugat un articol local, am inclus codul scurt [Sc: pdx] în vârf:

    Iată cum arată articolul când sosesc vizitatorii:

    Depășirea legăturilor absolute

    Sunt un utilizator de lungă durată a Digital Ocean, dar devin un fan mai entuziast de WP Engine, de asemenea; gazdele bine gestionate oferă avantaje în anumite circumstanțe. Sa dovedit că WP Engine a oferit o soluție pentru problema URL-ului absolut de WordPress, care era mai bună decât alternativele.

    WP Engine oferă un filtru de postprocesare în care puteți folosi expresii regulate pentru a modifica codul. După ce am luat în considerare alte abordări pentru modificarea WordPress și utilizarea propriilor API-uri pentru acest lucru, am decis că ar fi mai simplu să înlocuiți pur și simplu link-urile absolute către FleeTheJungle.com cu adrese relative. Acest lucru a permis utilizatorilor care vizitează un subdomeniu bazat pe oraș să rămână în situl geolocal:

    Înainte de a configura acest lucru, vizitele la subdomeniul Portland Flee the Jungle aveau linkuri de ieșire către fleethejungle.com la nivel global, împrăștiate între pagini. După configurarea acestuia, legăturile de ieșire au rămas compatibile cu domeniul sau subdomeniul de intrare.

    În esență, am folosit filtrul post-procesare pentru a elimina adresele URL absolute și pentru a permite adreselor URL ale browserului și adreselor relative să navigheze navigația.

    Lista orașelor

    Pentru a oferi un director al orașelor în care este și ar deveni disponibil Flee the Jungle, am construit o pagină care enumeră orașe unde utilizatorii globali ar putea să intre. De asemenea, o folosesc pentru a atrage voluntari pentru a lansa site-uri pentru orașele lor.

    Funcția Configure_Geolocal () finalizată

    Iată codul final pe care l-am folosit în WordPress pentru configure_geolocal ():

    funcția configure_geolocal () global $ nonlocal_category_ids; global $ known_cities; global $ domain_locale; global $ logo_image_url; // ID-uri de etichete pentru numele orașelor, de ex. Seattle, Portland $ known_cities = array (49,211); // ID-uri de categorii care sunt la nivel mondial, digitale care vor fi afișate fără modificări // de ex. Noțiuni introductive, Alternative primare și zâmbitoare, Streaming Media etc. $ nonlocal_category_ids = [1,22,29,30,46,57,60,195]; $ domain_locale = arrested_subdomain (); dacă ($ domain_locale == 'www' sau $ domain_locale == 'fleethejungle') $ domain_locale = false; $ logo_image_url = '/wp-content/uploads/2015/10/ftj-logo-global.gif';  altfel dacă ($ domain_locale == 'pdx' sau $ domain_locale == 'portland') $ domain_locale = 'portland'; $ logo_image_url = '/wp-content/uploads/2015/10/ftj-logo-portland.gif';  altfel dacă ($ domain_locale == 'mare' sau $ domain_locale == 'seattle') $ domain_locale = 'seattle'; $ logo_image_url = '/wp-content/uploads/2015/10/ftj-logo-seattle.gif';  altfel // oraș necunoscut - redirect wp_redirect ('http://fleethejungle.com/cities'); Ieșire; 

    Cerințe diverse

    Personalizarea Logo-ului    

    Desigur, am vrut să pun în aplicare personalizarea de bază a logo-ului, în funcție de subdomeniul. Tema KnowHow nu suportă acest aspect nativ.

    Dacă observați în finală configure_geolocal () cod, am stabilit o adresă URL a bibliotecii media pentru logo-urile pentru fiecare oraș.

    Apoi, codul din header.php personalizează URL-ul temei logo-ului bazat pe domeniu aici:

     

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

    Găzduirea de domenii și subdomenii

    WP Engine's mapping de domeniu poate fi un pic confuz pentru cei neinițiați. Trebuie să adăugați domenii pentru site-ul dvs. și să le mapați în sistemul intern de adresare WP Engine. Dacă doriți ca subdomeniile să funcționeze corect, trebuie să configurați individual fiecare subdomeniu din tabloul de bord al domeniilor WP Engine.

    Asta mi-a luat puțin timp să-mi dau seama. Aici adaug o pagina de sosire a locului pentru San Francisco, la care se poate ajunge de la sanfrancisco.fleethejungle.com sau sfbay.fleethejungle.com. Motorul WP facilitează configurarea acestor redirecționări:

    Iată o imagine preliminară a domeniilor configurate pentru globale și locale: Flee the Jungle:

    Din păcate, orașele în care nu adăugați în mod explicit redirecționarea la o eroare 404 la WP Engine. Există și alte modalități de a rezolva această problemă, dar pentru moment, eu doar adaug orașele mai mari la configurația de acolo. În general, oamenii vor fi direcționați spre pagina de pornire globală sau către un oraș preexistent - de acolo, se pot oferi voluntar pentru a-și începe propriul oraș.

    Alte probleme

    Optimizarea motorului de căutare internă Google este bine cunoscută pentru că este destul de secretă, totuși o mare parte din traficul de referință pe care site-ul dvs. îl primește depinde de acesta. 

    Unele conținuturi vor apărea pe mai multe domenii, dar o mare parte din acestea vor fi distincte în funcție de orașul pe care îl navigăm. Google nu-i place să vadă același conținut pe mai multe site-uri, dar este, de asemenea, bun la indexarea sub-domenii separat. 

    Sincer, nu am nici o idee despre modul în care modelul de rețea geolocală Flee the Jungle va fi primit și clasat în cadrul megaplex-ului său supercomputer. Aceasta este o prioritate mai mică pentru mine în acest moment. Fundamentul traficului Flee the Jungle este sprijinul la nivel local și împărtășirea socială.

    În încheiere

    Comparați diferențele dintre conținutul site-ului local Flee the Jungle și site-ul local al orașului Portland:

    Desigur, există o serie de moduri în care aș fi putut aborda provocarea de a crea site-uri geolocale. Cu toate acestea, Flee the Jungle rămâne un efort voluntar - am avut nevoie de o soluție care ar fi simplă și rapidă, în timp ce ar fi ușor să adăugați orașe, făcând bloggeri drept voluntari. Abordarea pe care am descris-o a împlinit rapid aceste obiective.

    Rezultatul acestei personalizări este că avem o singură instalare WordPress care poate rula sute de variații geo-locale ale site-ului nostru, cu conținut universal și local care este în mod corespunzător filtrat și organizat. Cel mai important, voluntarii pot construi și lansa orașe cu abilitățile de bază ale unui blogger WordPress. Acest lucru este mult mai simplu și mai rapid decât "prietenul" meu WordPress multisite sau care rulează instalări separate. Viitorul este relativ nelimitat.

    Sper că v-ați bucurat de acest tutorial și vă veți bucura de audierea cum ați fi putut aborda această provocare. Dacă doriți să lansați un ghid de cumpărături pentru orașul dvs., contactați-ne. Dacă sunteți interesat de construirea unui site ca acesta, am scris un tutorial detaliat, pas cu pas, pentru a vă construi propriul site de baze de cunoștințe pe WordPress. Să presupunem că doriți să vă lansați propriul site de fanii Harry Potter - este un ghid simplu pentru a începe.

    Vă rugăm să nu ezitați să postați întrebările și comentariile dvs. de mai jos. De asemenea, puteți să mă contactați pe Twitter @reifman sau să mă trimiteți direct prin e-mail. Puteți căuta, de asemenea, pagina mea de instructor Envato Tuts + pentru a vedea alte tutoriale pe care le-am scris.

    Link-uri conexe

    • Portland Flee the Jungle
    • Cum se utilizează Hărți din vecinătate Zillow și Geolocație HTML5
    Cod