Waarom u geen URL's moet coderen in WordPress-thema's of plug-ins

Wanneer u een thema of een plug-in ontwikkelt, zult u vaak merken dat u een URL in uw code moet opnemen. In een plug-in kunt u bijvoorbeeld een link naar een stylesheet gebruiken die bij de plug-in is geleverd, terwijl u in een thema de URL van de site in uw header waarschijnlijk wilt coderen.

Het is misschien verleidelijk om de URL gewoon op dezelfde manier te coderen als op een statische site, maar het is een slecht idee. In deze tutorial leg ik uit waarom je dit niet zou moeten doen - en laat je de functies zien die je kunt gebruiken om URL's dynamisch te maken.

Waarom u URL's niet moet coderen in uw thema's en plug-ins

Laten we beginnen met thema's. Als u een thema aan het ontwikkelen bent voor gebruik op een specifieke site, lijkt het misschien niet te schadelijk om het domein van die site ergens in de themabestanden toe te voegen, maar er zijn enkele duidelijke risico's en nadelen:

  • Als u ooit besluit de domeinnaam van de site te wijzigen, moet u alle URL's bewerken die u hard-gecodeerd heeft.
  • Als u werkt aan een ontwikkelsite die u bij de lancering naar een live server verplaatst, moet u alle URL's wijzigen die u hard-gecodeerd heeft.
  • Als u besluit het thema op een andere site te gebruiken, moet u al die URL's bewerken.
  • Als u besluit het thema openbaar te maken of door andere ontwikkelaars te laten gebruiken, zal het breken.
  • Als u het thema gebruikt als basis voor een ander thema dat u voor een andere site ontwikkelt, moet u alle URL's bewerken.
  • Als uw site zich in een submap van de hoofdmap van uw domein bevindt maar u hebt aangegeven dat WordPress de hoofdmap voor de URL moet gebruiken, kunnen uw hardgecodeerde URL's naar de verkeerde plaats verwijzen.
  • Als u ooit een van de bovenstaande dingen vergeet, krijgt uw site 404 fouten en koppelingen naar bronnen zoals afbeeldingen en stylesheets zullen niet werken.

Dus doe het niet!

Maar hoe zit het met plug-ins? Nou, dit is nog riskanter. Het is niet ongebruikelijk om een ​​thema te ontwikkelen voor slechts één site, maar de meeste plug-ins worden op meerdere sites gebruikt. Het is onwaarschijnlijk dat u ooit een volledige URL in een plug-in zou coderen, maar u kunt in de verleiding komen om een ​​functie te gebruiken om de URL van de site op te halen en vervolgens het pad naar de plugin-directory te coderen. Nogmaals, dit is riskant:

  • Als uw plug-in naar een andere map wordt verplaatst (zoals de directory die moet worden gebruikt), zullen alle koppelingen worden verbroken.
  • Als uw plug-in is geïnstalleerd in een multisite-netwerk waarop een oudere versie van WordPress draait, kunnen uw links breken.
  • Als uw plug-in op een site is geïnstalleerd met een andere directorystructuur dan die u voor uw URL's heeft gebruikt, zullen uw links opnieuw verbroken worden.

Dit kan ertoe leiden dat uw plug-in simpelweg niet werkt.

Wat doet u dan om hardcoderings-URL's in WordPress te vermijden??

Te gebruiken functies in plaats van hard gecodeerde URL's

Er zijn verschillende functies die u gebruikt om hardcoderings-URL's in WordPress te vermijden. Ik ga ze opsplitsen in vijf categorieën:

  • functies om de startpagina van de site op te halen
  • functies voor het ophalen van andere front-endkoppelingen (inclusief berichten, pagina's, bijlagen en archieven)
  • functies voor het ophalen van URL's voor de beheerdersschermen
  • functies voor het ophalen van URL's voor bestanden in uw plug-in en de mappen van het thema
  • functies om stylesheets en scripts op te halen

Laten we beginnen met de functies om een ​​link naar de startpagina op te halen en uit te voeren.

De startpagina-URL ophalen

De volgende sjabloonlabels zullen de URL van de startpagina voor uw site ophalen of uitvoeren:

  • bloginfo ('url'): geeft de persoonlijke URL weer zoals opgegeven in uw leesinstellingen in de beheerder.
  • get_bloginfo ('url'): haalt de site-URL op zonder deze weer te geven.
  • HOME_URL (): haalt de startpagina-URL op zonder deze weer te geven: gebruik echo esc_url (home_url ('/')); om de eigen URL weer te geven met een slash. Hiervoor zijn twee optionele parameters nodig: $ path als u een pad aan een specifieke pagina wilt toevoegen of een trash-schuine streep wilt toevoegen, en $ regeling om het schema voor de URL op te geven, zoals http, https en familielid.
  • get_home_url () haalt de URL op voor de startpagina en ondersteunt Multisite: u kunt de blog-ID opnemen als een parameter.
  • SITE_URL (): de URL waar WordPress is opgeslagen, dus als uw WordPress-installatie zich in de submap wordpress bevindt, zal dit de URL ophalen http://mysite.com/wordpress
  • get_site_url (): Haalt de site-URL op zonder deze uit te voeren. Kan ook worden gebruikt met parameters om de URL voor een site in een multisite-netwerk uit te voeren, een pad toe te voegen en een specifiek schema te gebruiken.
  • network_home_url (): de persoonlijke URL voor de hoofdsite in een multisite-netwerk, handig als u bijvoorbeeld een link naar de hoofdsite wilt opnemen in de voettekst van elke site op het netwerk, bijvoorbeeld.
  • network_site_url (): de site-URL voor de hoofdsite in een multisite-netwerk.

Zoals u kunt zien, zijn er een paar verschillende tags die u kunt gebruiken om de URL weer te geven. Welke u gebruikt, is afhankelijk van een aantal acteurs:

  • Wilt u de URL gewoon ophalen of weergeven??
  • Wilt u een pad toevoegen na de thuis-URL? (U kunt dit in sommige gevallen voorkomen met behulp van de functies in de volgende sectie.)
  • Wilt u het schema opgeven??
  • Wilt u de startpagina-URL of de site-URL ophalen, als deze verschillen?
  • Wilt u de URL ophalen voor een site in een multisite-netwerk??

U moet een van deze gebruiken in uw themasjabloonbestanden waar u een link naar de startpagina wilt invoegen, bijvoorbeeld als een logo in de hoofdkop van uw site naar de startpagina verwijst. Er kunnen ook gevallen zijn waarbij een plug-in de startpagina-URL moet ophalen of weergeven.

Andere front-end URL's ophalen

Naast de URL van de startpagina, kan het voorkomen dat u links naar andere pagina's op uw site wilt coderen. Dit omvat pagina's, berichten, bijlagen en aangepaste berichttypen. Dit zijn de functies die u moet gebruiken:

  • post_permalink () geeft een link naar een bericht uit, met de bericht-ID als parameter.
  • get_page_link () haalt de link naar een pagina op, maar voert deze niet uit, met de pagina-ID als een parameter.
  • get_permalink () haalt de permalink voor een bericht of pagina op, maar voert deze niet uit, met de post- of pagina-id als parameter.
  • get_category_link () haalt de koppeling naar een categoriearchief op, met de categorie-ID als parameter.
  • get_tag_link () haalt de koppeling naar de archiefpagina van een tag op, met de tag-ID als parameter.
  • get_post_type_archive_link () haalt de koppeling op naar het archief van een berichttype, met het berichttype als parameter.
  • get_term_link () haalt de link op naar een taxonomie-term, met de term en de taxonomie als parameters.
  • the_attachment_link () geeft de koppeling naar een bijlage uit, met de bijlage-ID als eerste parameter. Gebruik andere parameters om de afbeeldingsgrootte te definiëren en of de koppeling naar het bestand zelf of naar de bijlagepagina leidt.
  • get_attachment_link () haalt de link op voor een bijlage, met de bijlage-ID als parameter.
  • wp_get_attachment_link () haalt ook de koppeling naar een bijlage op, maar laat u ook de afbeelding weergeven als de bijlage een afbeelding is, op een formaat dat u opgeeft.
  • get_search_link () haalt de link naar de zoekpagina op. U kunt een query als parameter definiëren of deze leeg laten, in welk geval de huidige query wordt gebruikt.

Beheerders-URL's ophalen

Als u een plug-in of thema aanmaakt met instellingenschermen in de WordPress-beheerder, of als u de beheerdersschermen aanpast, wilt u misschien koppelingen toevoegen aan beheerdersschermen. Nogmaals, u moet uw URL's niet hardcoden, maar een van deze tags gebruiken:

  • admin_url () haalt een URL op in de admin (maar deze wordt niet uitgevoerd). U moet het pad naar de URL als een parameter opnemen en het schema indien nodig ook opnemen. Dus, bijvoorbeeld om de URL voor het scherm uit te voeren om een ​​nieuw bericht te maken, zou je gebruiken echo admin_url ('post-new.php');.
  • get_admin_url () is gelijkaardig aan admin_url () maar ondersteunt Multisite-netwerken: u kunt de blog-ID opnemen als een parameter.
  • edit_post_link () toont een link naar de bewerkingspagina voor een bericht. Het kan worden gebruikt in de lus of buiten de lus met de bericht-ID als een parameter.
  • get_edit_post_link () haalt de koppeling naar het bewerkingsscherm van een bericht op, met de bericht-ID als parameter.

Bestanden ophalen in uw plug-in en themamappen

Net zoals bij het coderen van URL's in de front-end- of admin-schermen, moet u ook URL's en paden correct coderen als u naar bestanden in uw plug-in of themamappen verwijst. 

Ten eerste, hier zijn de functies die u zou moeten gebruiken in themabestanden:

  • get_stylesheet_directory () haalt het volledige serverpad (niet de URL) op voor de directory van het actueel geactiveerde thema. Gebruik dit om include-bestanden aan te roepen in plaats van links uit te voeren.
  • get_stylesheet_directory_uri () haalt de URL op voor het actueel geactiveerde thema, zonder een trash. Gebruik het in sjabloonbestanden om bronnen op te halen die zijn opgeslagen in uw themamap: om bijvoorbeeld een afbeelding weer te geven die is opgeslagen in de map met afbeeldingen van uw thema, gebruikt u .
  • get_bloginfo ('stylesheet_directory') haalt de URL op voor het actueel geactiveerde thema: gebruiken get_stylesheet_directory_uri () is netter.
  • get_template_directory_uri () is gelijkaardig aan get_stylesheet_directory_uri () maar als u een kindthema gebruikt, haalt het de URL op voor het bovenliggende thema. evenzo, get_template_directory () werkt op dezelfde manier als get_stylesheet_directory () maar voor het ouderthema.

Er zijn ook functies voor gebruik in plug-in bestanden:

  • plugins_url () haalt de absolute URL naar de map met plug-ins (zonder een schuine streep). Er zijn twee optionele parameters nodig: het pad dat moet worden toegevoegd na de URL en de plug-in waaraan u de URL wilt relateren.
  • plugin_dir_url () haalt de URL op voor de map waarin een bestand zich bevindt (met een trash naar achteren), met dat bestand als parameter. Normaal zou je gebruiken __HET DOSSIER__ als zijn parameter om het huidige bestand aan te duiden.

Hier is een voorbeeld van elk van de bovenstaande. Ten eerste bevat het ophalen van de URL voor een bestand in de huidige plug-ins de map:

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

En om dezelfde URL op te halen met plugin_dir_url ():

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

Merk op dat je bij het tweede voorbeeld het pad na de functie moet herhalen: ik geef de voorkeur aan het eerste als het netter is. Vergeet niet dat de tweede een slash teruggeeft en de eerste niet.

Stijlpagina's en scripts ophalen

U mag nooit links naar stylesheets en scripts hardcoderen in uw sjabloonbestanden of plug-ins: gebruik in plaats daarvan een functie en koppel deze aan de juiste haak. Dit voorkomt problemen met bestanden die worden verplaatst, zorgt ervoor dat u de juiste scripts gebruikt zonder duplicatie, en is ook efficiënter.

Gebruik. Om een ​​stylesheet te bellen wp_register_style () en wp_enqueue_style () in een functie en haak het aan de wp_enqueue_scripts haak. De onderstaande functie zou dit doen in een plug-in:

Merk op dat ik heb gebruikt __HET DOSSIER__ hierboven, die WordPress vertelt dat het pad naar het stylesheet relatief is ten opzichte van het huidige bestand.

Het aanroepen van een script is vergelijkbaar, maar gebruikt wp_register_script () en wp_enqueue_script () in uw functie en koppelt die aan de wp_enqueue_scripts haak. Het onderstaande voorbeeld registreert een nieuw script en roept het:

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

Als uw script een script gebruikt dat is gebundeld met WordPress, zoals jQuery, hoeft u het niet te registreren; gewoon in de wacht slepen als volgt:

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

Lees meer over de wp_enqueue_scripts haak in deze tutorial over het toevoegen van JavaScript en CSS in uw thema's en plug-ins.

Samenvatting

Hopelijk heb ik je ervan overtuigd dat hardcoderings-URL's in WordPress een slecht idee zijn: het kan in de toekomst tot allerlei problemen leiden en is minder efficiënt. Afhankelijk van waar u naartoe moet linken, biedt WordPress een functie om elke hard-gecodeerde URL te vervangen, in uw thema's of plug-ins. U kunt functies en sjabloontags gebruiken om naar pagina's in de voorkant van uw site te linken, inclusief de startpagina, naar schermen op de WordPress-beheerder en naar bestanden in uw sjablonen of invoegtoepassingen..