For å kunne starte et billig globalt nettverk av nettsteder som drives av frivillige som ville gi kundene kategoriserte kataloger til lokale butikker, trengte jeg å utnytte kraften i WordPress med noen uvanlige tilpasninger og løsninger. Det finnes en rekke tilnærminger for å gi lokale erfaringer med WordPress. I denne opplæringen skal jeg vise deg hvorfor og hvordan vi bestemte oss for å lage en tilpasset løsning.
I juli lanserte jeg en global guide til internettbaserte alternativer til shopping på Amazon, kalt FleetheJungle.com, og svaret var utmerket. Vi mottok mye mediedekning og etterfølgende trafikk. Det er ikke en database-drevet app; i stedet leverte vi det utestående KnowHow kunnskapsbasertemaet:
Men for å vokse nettstedet måtte vi tilby geolokale versjoner for de enkelte byer. Absolutt det globale nettstedet hjelper besøkende med å avbryte sine primære medlemskap eller finne alternativer til Kindle bøker, men det var ikke noe å oppmuntre folk til å støtte små bedrifter i deres lokalsamfunn.
Til å begynne med, ville vi bygge en guide for lokale kjøpere i nærliggende Portland, en by med en stolt arv av quirky, uavhengige små bedrifter.
Kreditt: Skog og bølger Portland Kart av Edward Juan.Sikkert, jeg har skrevet nok om raskt å lansere en mengde WordPress-nettsteder ved hjelp av forhåndsdefinerte, forhåndsoptimale oppskrifter, men opprettholder relaterte krav til et nettverk kan være ekstremt tidkrevende - ting som administrasjon av SEO, WordPress og plugin-oppgraderinger, etc.
Jeg vurderte også WordPress Multisite, men selv om jeg vet hun er vokst mye, vi hadde en rekke vanskelige parringer og var sannsynligvis aldri ment å være sammen. Når du blir involvert med "henne", er det veldig vanskelig å bryte opp.
Jeg trengte en enklere løsning.
I denne opplæringen vil jeg veilede deg gjennom tilpasninger og triks jeg brukte med WordPress og mitt kunnskapsbasertema for å lansere vår Portland-handleliste og gjøre det enkelt å starte et hvilket som helst antall andre byer, samtidig som du unngår overhead for å administrere dusinvis eller hundrevis av sider.
Her er noen av de grunnleggende kravene for å lansere flere nettsteder:
1. Oppretthold et verdensomspennende nettsted. Jeg ønsket å holde det globale, fleethejungle.com primære domenet intakt, uten lokale artikler, men i stedet en guide til våre tilgjengelige byer.
2. Lokaliser etter sub-domene. Jeg ønsket innhold lokalisert av sub-domene. For eksempel vil et besøk til http://portland.fleethejungle.com fremme lokalinnhold på nettstedet mens du bruker noen spesifikke nasjonale nettstedskategorier knyttet til shopping på det bredere Internettet, f.eks. video streaming (det er ikke noe Portland-basert alternativ til HBO nå). CraigsList gir en god modell for dette.
3. Integrasjon mellom lokalt og verdensomspennende. Jeg ønsket å gi lokale besøkende en forklaring på forskjellene mellom deres lokale nettsted og det globale nettstedet, samtidig som de oppfordret dem til å delta i å forbedre oppføringene i byen deres.
4. Volunteer styrt. Jeg ønsket å gjøre det enkelt å legge til byer regelmessig på nettstedet på en måte som bare krever frivillige med grunnleggende blogging ferdigheter for å starte og vedlikeholde. Det er for mange krav til å lansere nye WordPress-nettsteder for hver enkelt by for å enkelt gjøre dette med frivillige.
5. Minimal vedlikehold. Til slutt ønsket jeg å opprettholde vedlikeholdet av nettstedsnettverket like enkelt som å kjøre et enkelt nettsted.
La oss utforske noen av de tekniske tilnærmingene som ofte brukes til å håndtere slike krav.
For innholdsstyring er det tre grunnleggende tilnærminger jeg tenkte på:
Som jeg sa tidligere, er jeg ikke en fan av Multisite, og jeg ønsket å unngå kompleksiteten ved å lansere og vedlikeholde en rekke WordPress-nettsteder. Et nettsted som Flee the Jungle ville ha så mye sentralt innhold som må brukes på tvers av bysidene (for eksempel hvordan du avslutter ditt Prime-medlemskap), og jeg ville ikke behøve å opprettholde dette innholdet på tvers av forskjellige WordPress-installasjoner -eller skrive kode for å gjøre det.
Jeg bestemte meg for å filtrere innholdet avhengig av domenet eller underdomenet som ble brukt av den besøkende i nettleseren.
Hvis du har lest min veiledning Slik bruker du Zillow Neighborhood Maps og HTML5 Geolocation, vet du hvordan du bruker HTML5 nettleserbasert geolocation for å bestemme hvor en bruker er. Men jeg ønsket at brukeren skulle ha mer kontroll.
Jeg ønsket at brukeren skulle bruke et underdomene som den som har jobbet i årevis med CraigsList for å veilede dem til byen deres.
Men WordPress dominion over absolutte nettadresser gjør dette vanskelig. Da jeg først begynte å eksperimentere med å spore det inngående underdomenet for en by og kartlegge det til koblinger på siden, kjørte jeg inn i WordPress vane med å skape absolutte lenker nesten overalt. En kollega jeg snakket med om det, lekte umiddelbart da jeg spurte ham om det - det er en vanlig fiende av WordPress-utviklere.
I denne veiledningen deler jeg tilpassingene i vårt temas PHP-baserte spørringer for å bygge våre bybaserte nettsteder og hvordan vi til slutt jobbet rundt det absolutte nettadresseproblemet.
Slik bestemte jeg meg for å implementere bybaserte nettsteder for Flee the Jungle som lett kunne vedlikeholdes og forfattes av lokale bloggere uten ekstra tekniske ferdigheter.
Artikler skrevet for byer vil bli merket etter bynavn, f.eks. "Portland". Artikler for det globale nettstedet vil bli merket "verdensomspennende". Jeg ville ha muligheten til å inkludere verdensomspennende artikler om internettbaserte butikker for noen kategorier der det var mindre effektiv lokal støtte som video streaming. Andre kategorier er absolutt hensiktsmessig å fokusere utelukkende på lokale butikker som dagligvarer, bilbutikker og lekebutikker.
For geolokale nettsteder holder vi verdensomspennende kategorier på plass og viser kun forskjellige artikler for de lokalt aktuelle kategoriene. I fremtiden vil vi legge til verdensomspennende artikler til de lokale valgene i en kategori når det er hensiktsmessig.
Når besøkende ser på kategorisider og søk, filtrerer og tilpasser vi også resultatene ut fra disse designvalgene.
For å gjøre dette definerer vi arrays innenfor temaet ved deres ID:
Her er noen eksempler. Først, her er mitt utvalg av verdensomspennende (ikke-lokale) kategori-IDer:
// Kategori ID-er som er verdensomspennende, digitale for å bli vist uten endringer // f.eks. Komme i gang, Prime og Smile Alternativer, Streaming Media, etc. $ nonlocal_category_ids = [1,22,29,30,46,57,60,195];
Du kan hente dem fra å kikke på kategoridokumentet i kategorien Dashboard-kategori (ved å sveve med musen over kategorinavnet som vist lenger under med koder):
Eller rediger kategorien og ta IDen fra redigeringsadressen (Starter er 29):
Her er tag-IDene for Seattle og Portland:
// Tag ID for bynavn, f.eks. Seattle, Portland $ known_cities = array (49,211);
Seattle er 49. Du kan se taggen id ved å svinge over byen og la statuslinjen avsløre det:
For å få tak i domenet eller underdomenet brukte jeg Trevor Scotts WordPress-tips og plasserte det innenfor temaets funksjoner.php.
Her er WordPress Dashboard Theme Editor:
Og her er Trevors kode:
/ ** * @forfatter Trevor Scott* @version 1.0 2010-12-07 * https: //wordpress.org/support/topic/how-do-i-get-sub-domain-name * Hent underdomenet av nettadressen. Hvis det ikke er et underdomen, blir rot * -domenet sendt tilbake. Som standard returnerer denne funksjonen * verdien * som en * streng. Kaller funksjonen med echo = true skriver svaret direkte på * skjermen. * * @param bool $ echo * / funksjon arrested_subdomain ($ echo = false) $ hostAddress = eksplodere ('.', $ _SERVER ["HTTP_HOST"]); hvis (is_array ($ hostAddress)) hvis (eregi ("^ www $", $ hostAddress [0])) $ passBack = 1; ellers $ passBack = 0; hvis ($ echo == false) return ($ hostAddress [$ passBack]); ellers echo ($ hostAddress [$ passBack]); else return (false);
Når besøkende kommer til den globale hjemmesiden, vil domenet være fleethejungle.com i stedet for et underdomene. Jeg har opprettet en annen funksjon, configure_geolocal ()
, som kalles i begynnelsen av malen header.php filen. Her er den første delen av funksjonen:
funksjon configure_eolocal () global $ nonlocal_category_ids; global $ known_cities; global $ domain_locale; global $ logo_image_url; // Tag ID for bynavn, f.eks. Seattle, Portland $ known_cities = array (49,211); // Kategori ID-er som er verdensomspennende, digitale for å bli vist uten endringer // f.eks. Komme i gang, Prime og Smile Alternativer, Streaming Media, etc. $ nonlocal_category_ids = [1,22,29,30,46,57,60,195]; $ domain_locale = arrested_subdomain (); hvis ($ domain_locale == 'www' eller $ domain_locale == 'fleethejungle') $ domain_locale = false;
Slik kalles den av get_header ()
innenfor temaets header.php:
>
Når domenet er globalt, $ domain_locale
vil være falsk. Under disse omstendighetene vil jeg ekskludere artikler merket lokalt av byer. Og jeg vil gjøre dette på hjemmesiden og kategorisiden. Når domenet refererer til en lokal by, $ domain_locale
vil representere prefikset, f.eks. seattle eller portland.
I temaets hjemmeside, hvis den besøkende er på verdensomspennende nettsted (rutenett), ekskluderer jeg artikler merket med byer fra $ st_cat_post_args
array. Men hvis besøkende er på en byside og underdomenet er kjent, viser vi bare lokale artikler i de fleste kategorier bortsett fra de som er identifisert for nonlocal_category_ids-de er de som er mer hensiktsmessige for ikke-lokalt innhold, for eksempel video-streaming:
global $ known_cities; global $ nonlocal_category_ids; global $ domain_locale; hvis ($ domain_locale === false) // root besøk $ st_cat_post_args ['tag__not_in'] = $ known_cities; andre // lokalby blir vist, men inkluderer verdensomspennende artikler i denne kategorien hvis (in_array ($ st_category-> term_id, $ nonlocal_category_ids) $ st_cat_post_args ['tag_slug__in'] = array ($ domain_locale, 'worldwide'); else // bare vis lokale artikler $ st_cat_post_args ['tag_slug__in'] = array ($ domain_locale);
Her er koden i sammenheng med mer av funksjonen:
// Liste Innlegg $ st_cat_post_num = of_get_option ('st_hp_cat_postnum'); $ st_posts_order = of_get_option ('st_hp_cat_posts_order'); global $ post; // Hvis Vis innlegg er 0, gjør ingenting hvis ($ st_cat_post_num! = 0) // Listet av populære? hvis $ 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); ellers $ st_cat_post_args = array ('numberposts' => $ st_cat_post_num, 'orderby' => $ st_posts_order, 'category__in' => $ st_category-> term_id); global $ known_cities; global $ nonlocal_category_ids; global $ domain_locale; hvis ($ domain_locale === false) // root besøk $ st_cat_post_args ['tag__not_in'] = $ known_cities; andre // lokalby blir vist, men inkluderer verdensomspennende artikler i denne kategorien hvis (in_array ($ st_category-> term_id, $ nonlocal_category_ids) $ st_cat_post_args ['tag_slug__in'] = array ($ domain_locale, 'worldwide'); else // bare vis lokale artikler $ st_cat_post_args ['tag_slug__in'] = array ($ domain_locale); $ st_cat_posts = get_posts ($ st_cat_post_args); echo '
Med KnowHow-temaet kan besøkende også klikke på kategorinavnene, og ta dem til en artikkelliste i kategorien.
Hvis de er på det globale nettstedet, vil jeg bare vise globale artikler. Jeg valgte å merke alle globale artikler som "over hele verden" for å lette dette.
Så for det globale nettstedet, viser jeg bare artikler merket "verdensomspennende" og for lokale byområder, viser jeg bare artikler merket for den byen. Hvis kategorien er et eksepsjonelt tilfelle for begge, inkluderer vi artikler fra både den nåværende byen og hele verden.
Her er koden i temaets kategori.php:
Jeg tilpasser ikke spørringen her fordi ytelse for øyeblikket ikke er et stort problem. Jeg hopper bare på resultater ut av kontekst og ikke viser dem.
I fremtiden kan jeg tilpasse dette videre til bynettsteder ved å vise verdensomspennende resultater nederst på kategorisiden i en tydelig del.
Det er også viktig å utføre slike tilpasninger for søk. KnowHow-temaet gir et AJAX-søkeresultat eller en generert resultatresultatside. Vi må gi kode for å tilpasse hvert alternativ.
Live AJAX Search
For live søk er det nei get_header ()
ring så vi må konfigurere vår posisjon dynamisk:
Så integrerer vi den samme logikken som brukes på kategorisider innen levende søkeresultater:
// Sjekk om en av kategoriene er ekskludert fra lokal $ category_excluded = false; foreach ((get_the_category ()) som $ kategori) if (in_array ($ category-> cat_ID, $ GLOBALS ['nonlocal_category_ids'])) $ category_excluded = true; gå i stykker; hvis ($ GLOBALS ["domain_locale"]! == false && has_tag ($ GLOBALS ["domain_locale"]) || ($ category_excluded && has_tag ('worldwide')))
Dynamisk søkeresultatside
Hvis det ikke er AJAX, da get_header ()
er kalt for oss og det er litt enklere:
cat_ID, $ GLOBALS ['nonlocal_category_ids']))) $ category_excluded = true; gå i stykker; hvis ($ GLOBALS ["domain_locale"]! == false && has_tag ($ GLOBALS ["domain_locale"]) || ($ category_excluded && has_tag ('worldwide'))) get_template_part ('content', get_post_format ); annet hvis ($ GLOBALS ["domain_locale"] === false && has_tag ("worldwide")) get_template_part ('content', get_post_format ()); ?>
Som nevnt ovenfor for kategorier, kan jeg bestemme å tilpasse søkeresultatene for å vise en andre del av resultatene for globale artikler på bysider.
For å gi lokal besøkende en forklaring på forskjellene mellom deres lokale nettsted og det globale nettstedet, mens de oppfordrer dem til å delta i å forbedre oppføringene i byen, brukte jeg et plugin jeg skrev om i januar 2015 for Envato Tuts +: Fordelene ved å bruke Gratis Shortcoder Plugin. Det er et plugin som lar deg bruke makroer til å utvide re-usable HTML-innhold på plass. For hver byartikkel bruker vi den til å tilpasse hva lokale besøkende ser når de kommer fra Portland.
Når pluginet ble installert, opprettet jeg en kortnummer for hver by, for eksempel [Sc: PDX] som gir en enkel blurb øverst på de lokale artikelsidene:
Da, når vi la til en lokal artikkel, inkluderte vi kortnummeret [Sc: PDX] på toppen:
Slik ser artikkelen ut når besøkende kommer:
Jeg er en lang tid bruker av Digital Ocean, men jeg blir også en mer entusiastisk fan av WP Engine også; godt administrert hosting gir fordeler under noen omstendigheter. Det viste seg at WP Engine tilbød en løsning på det absolutte URL-problemet for WordPress, som var bedre enn alternativer.
WP Engine tilbyr et etterbehandlingsfilter der du kan bruke vanlige uttrykk for å endre kode. Etter å ha vurdert andre tilnærminger til å modifisere WordPress og bruke sine egne APIer for dette bestemte jeg meg for at det ville være enklest å bare erstatte absolutte lenker til FleeTheJungle.com med relative adresser. Dette tillot brukere som besøker et bybasert underdomene å forbli innenfor det geolokale nettstedet:
Før du konfigurerte dette, hadde besøk på Portland Flee the Jungle sub-domene utgående lenker til den globale fleethejungle.com spredt over sider. Etter å ha konfigurert det, forblir utgående koblinger konsistente med det innkommende domenet eller underdomenet.
I hovedsak brukte jeg etterbehandlingsfilteret til å eliminere absolutte nettadresser og tillate nettleserens nettadresse og relative adresser til å kjøre navigasjon.
For å gi en katalog over byene der Flee the Jungle er, og vil bli tilgjengelig, bygde jeg en side oppført byer hvor globale brukere kunne hoppe inn. Jeg bruker også den til å tiltrekke seg frivillige til å lansere nettsteder for sine byer.
Her er den endelige koden vi brukte i WordPress for configure_geolocal ():
funksjon configure_eolocal () global $ nonlocal_category_ids; global $ known_cities; global $ domain_locale; global $ logo_image_url; // Tag ID for bynavn, f.eks. Seattle, Portland $ known_cities = array (49,211); // Kategori ID-er som er verdensomspennende, digitale for å bli vist uten endringer // f.eks. Komme i gang, Prime og Smile Alternativer, Streaming Media, etc. $ nonlocal_category_ids = [1,22,29,30,46,57,60,195]; $ domain_locale = arrested_subdomain (); hvis ($ domain_locale == 'www' eller $ domain_locale == 'fleethejungle') $ domain_locale = false; $ logo_image_url = '/wp-content/uploads/2015/10/ftj-logo-global.gif'; annet hvis ($ domain_locale == 'pdx' eller $ domain_locale == 'portland') $ domain_locale = 'portland'; $ logo_image_url = '/wp-content/uploads/2015/10/ftj-logo-portland.gif'; annet hvis ($ domain_locale == 'sea' eller $ domain_locale == 'seattle') $ domain_locale = 'seattle'; $ logo_image_url = '/wp-content/uploads/2015/10/ftj-logo-seattle.gif'; ellers // ukjent by - omdirigere wp_redirect ('http://fleethejungle.com/cities'); exit;
Selvfølgelig ønsket jeg å implementere grunnleggende tilpasning av logoen, avhengig av underdomenet. KnowHow-temaet støtter ikke dette innfødt.
Hvis du oppdager i finalen configure_geolocal ()
kode, angir jeg et mediebibliotek URL for logoer for hver by.
Deretter tilpasser koden i header.php temlogo-nettadressen basert på domenet her:
"href =""> ">
WP Engines domenekartlegging kan være litt forvirrende for de uinitierte. Du må legge til domener for nettstedet ditt og kartlegge dem til WP Engines interne adressesystem. Hvis du vil at subdomener skal fungere skikkelig, må du individuelt konfigurere hvert underdomen fra WP Engine-domenenes dashboard.
Dette tok meg litt tid å finne ut. Her legger jeg til en plassholder ankomstside for San Francisco, som kan nås på sanfrancisco.fleethejungle.com eller sfbay.fleethejungle.com. WP Engine gjør det enkelt å sette opp disse omadressene:
Her er en foreløpig visning av domener konfigurert for global og lokal Flee the Jungle:
Dessverre, byer som du ikke eksplisitt legger omdirigere til en 404-feil på WP Engine. Det finnes andre måter å jobbe rundt på dette, men for øyeblikket legger jeg bare større byer til konfigurasjonen der. Folk vil generelt bli henvist til den globale hjemmesiden eller en eksisterende by, derfra kan de frivillig starte sin egen by.
Googles interne søkemotoroptimalisering er velkjent for å være ganske hemmelig, men mye av henvisningen trafikken din mottar avhenger av den.
Noen av innholdet våre vil vises på flere domener, men mye av det vil være tydelig avhengig av hvilken by vi surfer på. Google liker ikke å se det samme innholdet på flere nettsteder, men det er også godt å indeksere underdomener separat.
Helt ærlig, jeg har ingen anelse om hvordan Flee the Jungle geolokal nettverksmodell vil bli mottatt og rangert innenfor sin flotte supercomputing megaplex. Dette er en lavere prioritet for meg for øyeblikket. Grunnlaget for Flee the Jungle trafikk er grøntrods støtte og sosial deling.
Vennligst sammenlign forskjellene i innholdet mellom verdensomspennende Flee the Jungle og Portlands lokale byside:
Det er sikkert en rekke måter jeg kunne ha nærmet utfordringen med å skape geolokale nettsteder. Flee the Jungle forblir imidlertid et frivillig forsøk. Jeg trengte en løsning som ville være enkel og rask, samtidig som det blir enkelt å legge til byer, som utnytter bloggere som frivillige. Tilnærmingen jeg har beskrevet har oppnådd disse målene raskt.
Resultatet av all denne tilpasningen er at vi har en enkelt WordPress-installasjon som kan kjøre hundrevis av geografiske variasjoner på nettstedet vårt, med verdensomspennende og lokalt innhold på riktig måte filtrert og organisert. Viktigst av alt, kan frivillige bygge og lansere byer med bare de grunnleggende ferdighetene til en WordPress blogger. Dette er så mye enklere og raskere enn min "venn" WordPress multisite eller kjører separate installasjoner. Fremtiden er relativt ubundet.
Jeg håper du har hatt denne opplæringen og vil gjerne høre hvordan du har nærmet deg denne utfordringen. Hvis du vil lansere en handlekurv for din egen by, kontakt oss. Hvis du er interessert i å bygge et nettsted som dette, har jeg skrevet en detaljert, trinnvis opplæring for å bygge din egen kunnskapsbaserte nettside på WordPress. La oss si at du vil lansere din egen Harry Potter fan-side - det er en enkel guide for å komme i gang.
Ta gjerne inn dine spørsmål og kommentarer nedenfor. Du kan også kontakte meg på Twitter @ reifman eller email meg direkte. Du kan også bla gjennom Envato Tuts + instruktør siden for å se andre opplæringsprogrammer jeg har skrevet.