Hvorfor du ikke bør kode URL-adresser i WordPress-temaer eller pluginprogrammer

Når du utvikler et tema eller et plugin, finner du ofte at du må inkludere en URL i koden din. For eksempel, i et plugin kan du trenge en lenke til et stilark som følger med pluginet, mens du i et tema vil sannsynligvis kodes nettstedets URL i overskriften.

Det kan være fristende å bare kode URL-adressen på samme måte som mulig i et statisk område, men det er en dårlig ide. I denne opplæringen vil jeg forklare hvorfor du ikke bør gjøre dette - og vise deg de funksjonene du kan bruke til å opprette URL-er dynamisk.

Hvorfor du ikke bør kode URL-adresser i temaene og pluginene dine

La oss starte med temaer. Hvis du utvikler et tema for bruk på et bestemt nettsted, kan det hende at det ikke virker for skadelig å legge til domenet på dette nettstedet i temafilene et sted, men det er noen konkrete farer og ulemper:

  • Hvis du noen gang bestemmer deg for å endre nettstedets domenenavn, må du redigere alle nettadressene du har hardkodede.
  • Hvis du jobber på et utviklingssted som du skal flytte til en levende server ved lanseringen, må du endre alle nettadressene du har hardkodede.
  • Hvis du bestemmer deg for å bruke temaet på et annet nettsted, må du redigere alle disse nettadressene.
  • Hvis du bestemmer deg for å frigjøre temaet til offentligheten eller la andre utviklere bruke det, vil det bryte.
  • Hvis du bruker temaet som grunnlag for et annet tema du utvikler for et annet nettsted, må du redigere alle nettadressene.
  • Hvis nettstedet ditt er i en underkatalog av domenets rotkatalog, men du har fortalt WordPress å bruke rotkatalogen for nettadressen, kan de hardkodede nettadressene vise til feil sted.
  • Hvis du noen gang glemmer å gjøre noe av det over, vil nettstedet ditt få 404 feil, og lenker til ressurser som bilder og stilark vil ikke fungere.

Så ikke gjør det!

Men hva med plugins? Vel, dette er enda mer risikabelt. Det er ikke uvanlig å utvikle et tema bare for ett nettsted, men de fleste plugins vil bli brukt på flere nettsteder. Det er usannsynlig at du noensinne vil kode en fullstendig URL til et plugin, men du kan bli fristet til å bruke en funksjon for å hente nettstedets URL og kode deretter banen til plugin-katalogen. Igjen er dette risikabelt:

  • Hvis din plugin er flyttet til en annen katalog (for eksempel må du bruke katalogen), vil eventuelle koblinger bryte.
  • Hvis pluginet ditt er installert i et Multisite-nettverk som kjører en eldre versjon av WordPress, kan koblingene dine gå i stykker.
  • Hvis pluginet ditt er installert på et nettsted ved hjelp av en annen katalogstruktur til den du har brukt til nettadressene dine, vil dine lenker igjen bryte.

Dette kan føre til at pluginet bare ikke fungerer i det hele tatt.

Så, hva gjør du for å unngå hardkodende nettadresser i WordPress?

Funksjoner som skal brukes i stedet for hardkodede nettadresser

Det finnes en rekke funksjoner som du bruker for å unngå hardkodende nettadresser i WordPress. Jeg skal dele dem i fem kategorier:

  • Fungerer for å hente nettstedets hjemmeside
  • Fungerer for å hente andre frontend-linker (inkludert innlegg, sider, vedlegg og arkiver)
  • Fungerer for å hente nettadresser for admin skjermbildene
  • Fungerer for å hente nettadresser for filer i plugin og temaets kataloger
  • Fungerer for å hente stilark og skript

La oss starte med funksjonene for å hente og sende ut en link til hjemmesiden.

Henter hjemmesiden URL

Følgende maletiketter henter eller sender ut nettadressen til nettstedet ditt:

  • bloginfo ('url'): Viser hjemmeadressen som angitt i innstillingsinnstillingene i administrasjonen.
  • get_bloginfo ('url'): henter nettstedet URL uten å vise det.
  • HOME_URL (): henter hjemmesiden URL uten å vise den: bruk ekko esc_url (home_url ('/')); for å vise hjemmeadressen med et skråstrek. Dette tar to valgfrie parametere: $ path hvis du vil legge til en bane til en bestemt side eller legge til et skråstrek, og $ ordningen å spesifisere ordningen for nettadressen, for eksempel http, https og slektning.
  • get_home_url () henter URL-adressen til hjemmesiden, og støtter multisite: du kan inkludere blogg-IDen som en parameter.
  • site_url (): URL-adressen der WordPress er lagret, så hvis din WordPress-installasjon er i underkatalogen for wordpress, vil dette hente URL-adressen http://mysite.com/wordpress
  • get_site_url (): Henter nettstedet URL uten å utføre det. Kan også brukes med parametere for å utføre nettadressen for et nettsted i et Multisite-nettverk, legge til en bane og bruke en bestemt ordning.
  • network_home_url (): Hjemadressen til hovedstedet i et multisitalt nettverk, nyttig hvis du vil inkludere en lenke til hovedstedet i bunnteksten til hvert nettsted på nettverket, for eksempel.
  • network_site_url (): Nettstedets nettadresse for hovedstedet i et multisitalt nettverk.

Som du kan se, finnes det noen få forskjellige koder du kan bruke til å vise nettadressen. Som du bruker vil avhenge av en rekke aktører:

  • Vil du bare hente nettadressen eller vise den?
  • Vil du legge til en bane etter hjemmeadressen? (Du kan unngå dette i noen tilfeller ved hjelp av funksjonene i neste avsnitt.)
  • Vil du spesifisere ordningen?
  • Ønsker du å hente hjemmesiden URL eller webområdet URL, hvis disse er forskjellige?
  • Ønsker du å hente nettadressen for et nettsted i et multisites nettverk?

Du bør bruke en av disse i temmalatfiler hvor du vil sette inn en lenke til hjemmesiden, for eksempel hvis en logo i nettstedets hode kobler til hjemmesiden. Det kan også være tilfeller der et plugin må hente eller vise hjemmesiden URL.

Henter andre forutgående webadresser

I tillegg til hjemmesidenes URL kan det være ganger når du vil kode koblinger til andre sider på nettstedet ditt. Dette vil inkludere sider, innlegg, vedlegg og tilpassede innleggstyper. Her er de funksjonene du bør bruke:

  • POST_PERMALINK () sender ut en kobling til et innlegg, med post-ID som parameter.
  • get_page_link () henter (men utfører ikke) lenken til en side, med sidens ID som en parameter.
  • get_permalink () henter (men utsender ikke) permalinken for et innlegg eller en side, med post eller sidens ID som parameter.
  • get_category_link () henter linken til et kategoriarkiv, med kategori-ID som parameter.
  • get_tag_link () henter linken til en etiketts arkivside, med tag-ID som parameter.
  • get_post_type_archive_link () henter linken til en posttype arkiv, med posttypen som dens parameter.
  • get_term_link () henter linken til en taksonomi, med begrepet og taksonomien som parametere.
  • the_attachment_link () Utgir lenken til et vedlegg, med vedleggs-ID som sin første parameter. Bruk andre parametere til å definere bildestørrelsen og om koblingen vil føre til selve filen eller vedleggssiden.
  • get_attachment_link () henter linken for et vedlegg, med vedleggs-ID som parameter.
  • wp_get_attachment_link () Henter også lenken til et vedlegg, men i tillegg lar du vise bildet hvis vedlegget er et bilde, i en størrelse du angir.
  • get_search_link () henter linken til søksiden. Du kan definere en forespørsel som sin parameter, eller la den være tom, i så fall vil den bruke gjeldende spørring.

Henter administratoradresser

Hvis du lager et plugin eller et tema med innstillingsskjermbilder i WordPress-administratoren, eller du tilpasser administrasjonsskjermbildene, kan du legge til linker til administrasjonsskjermbilder. Igjen, bør du ikke hardkode dine nettadresser, men bruk en av disse kodene:

  • admin_url () henter (men utsender ikke) en URL i administrasjonen. Du må inkludere banen til nettadressen som en parameter, og kan også inkludere ordningen hvis nødvendig. For eksempel, for å skrive ut nettadressen for skjermen for å opprette et nytt innlegg, vil du bruke echo admin_url ('post-new.php');.
  • get_admin_url () den er lik admin_url () men støtter multisite-nettverk: du kan inkludere blogg-IDen som en parameter.
  • edit_post_link () viser en lenke til redigeringssiden for et innlegg. Den kan brukes i løkken eller utenfor løkken med post-ID som en parameter.
  • get_edit_post_link () henter linken til et innleggs redigeringsskjerm med post-ID som parameter.

Henter filer i Plugin og Tema-mapper

Akkurat som når du kodes nettadresser i front-end eller admin-skjermene, bør du også kode URL-adresser og stier riktig når du henviser til filer i plugin- eller temamapper. 

Først, her er de funksjonene du bør bruke i temafiler:

  • get_stylesheet_directory () henter hele serverbanen (ikke URL-adressen) for katalogen som er aktivert for øyeblikket. Bruk dette til å ringe inkludere filer i stedet for å sende ut koblinger.
  • get_stylesheet_directory_uri () henter nettadressen for det aktuelt aktiverte temaet, uten et skråstrek. Bruk den i malfiler for å hente ressurser som er lagret i temamappen din: for eksempel å vise et bilde som er lagret i temaets bildermappe, bruk .
  • get_bloginfo ('stylesheet_directory') henter nettadressen for det aktuelt aktiverte temaet: bruk get_stylesheet_directory_uri () er penere.
  • get_template_directory_uri () den er lik get_stylesheet_directory_uri () men hvis du bruker et barnemne, henter det nettadressen for foreldetemaet. på samme måte, get_template_directory () fungerer på samme måte som get_stylesheet_directory () men for overordnet tema.

Det finnes også funksjoner for bruk i pluginfiler:

  • plugins_url () henter den absolutte nettadressen til plugin-katalogen (uten et skråstrek). Det krever to valgfrie parametre: banen til å legge til etter nettadressen, og pluginet som du vil at nettadressen skal være relatert til.
  • plugin_dir_url () henter nettadressen for katalogen en fil er i (med et skråstrek), med den filen som dens parameter. Normalt vil du bruke __FIL__ som parameter for å angi gjeldende fil.

Her er et eksempel på hver av de ovennevnte. For det første, for å hente nettadressen for en fil i gjeldende plugin, inneholder katalogen:

plugins_url ('includes / myfile.php', __FILE__);

Og for å hente den samme nettadressen ved hjelp av plugin_dir_url ():

plugin_dir_url (__FILE__). 'inkluderer / myfile.php';

Merk at med det andre eksemplet må du ekko ut banen etter funksjonen: Jeg foretrekker den første som den er finere. Ikke glem at den andre returnerer et skråstrek og den første ikke gjør det.

Henter stilark og skript

Du bør aldri koble harddiskkoblinger til stilark og skript i malfiler eller plugins: bruk i stedet en funksjon og fest den til riktig krok. Dette unngår problemer med at filene flyttes, sikrer at du bruker de riktige skriptene uten duplisering, og er også mer effektive.

For å ringe et stilark, bruk wp_register_style () og wp_enqueue_style () i en funksjon og hek det til wp_enqueue_scripts kroken. Funksjonen nedenfor ville gjøre dette i et plugin:

Legg merke til at jeg har brukt __FIL__ ovenfor, som forteller WordPress at banen til stilarket er i forhold til gjeldende fil.

Å ringe et skript er lik, men bruker wp_register_script () og wp_enqueue_script () i din funksjon, og legger dem til wp_enqueue_scripts kroken. Eksempelet nedenfor registrerer et nytt skript og kaller det:

funksjon register_my_scripts () wp_register_script ('my_script', plugins_url ('/js/script.js', __FILE__)); wp_enqueue_script ('my_script');  add_action ('wp_enqueue_scripts', 'register_my_scripts');

Hvis skriptet ditt bruker et skript som er buntet med WordPress, for eksempel jQuery, trenger du ikke å registrere det. bare enqueue det som følger:

funksjon register_my_scripts () wp_enqueue_script ('my_script', plugins_url ('/js/script.js', __FILE__), 'jquery', 'true');  add_action ('wp_enqueue_scripts', 'register_my_scripts');

Les mer om wp_enqueue_scripts koble i denne opplæringen om å inkludere JavaScript og CSS i dine temaer og plugins.

Sammendrag

Forhåpentligvis har jeg overbevist deg om at hardkodende nettadresser i WordPress er en dårlig ide: det kan føre til alle slags problemer i fremtiden, og er mindre effektiv. Avhengig av hvor du trenger å koble til, gir WordPress en funksjon for å erstatte alle hardkodede nettadresser, enten i dine temaer eller plugins. Du kan bruke funksjoner og maltekoder til å koble til sider i frontendens side, inkludert hjemmesiden, til skjermbilder på WordPress-administrasjonen, og til filer i maler eller plugins.