Posted in

En trinn-for-trinn-guide til å lage shortcodes i WordPress

Norwegian developer creating a wordpress shortcode in code editor and block editor

Shortcodes i WordPress er den lille superkraften mange glemmer. Med en enkel tag – som [min_shortcode] – kan de hente data, formatere innhold og integrere eksterne tjenester uten at redaktører må røre PHP. Denne guiden viser, steg for steg, hvordan de lager trygge, raske og vedlikeholdbare shortcodes i WordPress. Underveis dekkes beste praksis, sikkerhet, ytelse og hvordan alt spiller sammen med blokkredigereren. Målet: en robust oppskrift de faktisk vil bruke – og som tåler både oppdateringer og trafikk.

Hovedpoeng

  • Lag shortcodes i WordPress som en egen plugin for tema-uavhengighet og enkel versjonering; bruk child-tema kun når funksjonen aldri skal flyttes.
  • Prefiks både tag og funksjonsnavn, registrer med add_shortcode, og returner HTML (ikke echo) for stabil og forutsigbar rendering.
  • Gjør shortcoden fleksibel og trygg med shortcode_atts for standardverdier, sanitér input (sanitize_text_field, absint), og escape alt output (esc_html, esc_attr, esc_url).
  • Hent dynamisk innhold via WP_Query eller wp_remote_get med feilhåndtering og tidsavbrudd, og cache tunge resultater med transients og ryddige nøkler.
  • Bruk shortcodes i WordPress både i blokkredigereren (Shortcode-blokken) og i PHP-maler med do_shortcode, og vurder direkte funksjonskall når de er designet for det.
  • Unngå fallgruver med WP_DEBUG og logging, håndter kollisjoner og tilgang (shortcode_exists, current_user_can, nonces ved skjema), og følg i18n, tilgjengelighet og SEO-prinsipper.

Hva Er Shortcodes, Og Når Bør Du Bruke Dem?

Hands editing wordpress shortcodes; php function open on second monitor in norway.

Shortcodes er små kodesnutter som oversettes til dynamisk innhold når WordPress rendrer siden. De ser slik ut i editoren: [galleri id=»123″] eller [pris]129[/pris]. Bak kulissene peker de mot en PHP-funksjon som returnerer HTML (eller tekst).

De passer når redaktører skal gjenbruke funksjonalitet uten å kode: vise lister med innhold, trekke data fra API-er, bygge små komponenter (tabs, varsler), eller eksponere kontrollerte database-spørringer. Shortcodes kombinerer fleksibiliteten fra kode med enkelheten i editoren.

Når ikke bruke dem? Hvis behovet er rent visuelt og løses bedre som en blokk, velg en Gutenberg-blokk. Men når funksjonen skal kunne brukes både i eldre innhold, widgets og PHP-maler, er shortcodes i WordPress fortsatt et trygt valg.

Forberedelser Og Beste Praksis

Developer codes a wordpress shortcode plugin with security notes in oslo.

Hvor Koden Bør Ligge: Egen Utvidelse Eller Child Tema

For modulær og oppgraderbar kode bør shortcodes ligge i en egen, liten plugin. Det gjør funksjonen tema-uavhengig og enklere å versjonere. Dersom shortcoden kun hører til ett spesifikt tema og aldri skal flyttes, er child-temaets functions.php et akseptabelt sted. Unngå å putte egendefinert kode i hovedtema eller tredjeparts-plugins – det ryker ved oppdatering.

Navngivning Og Prefiks For Å Unngå Kollisjoner

Navngi konsekvent og bruk prefiks både på shortcodens tag og PHP-funksjoner: prefix_min_shortcode og function prefix_min_shortcode(). Det reduserer risiko for navnekollisjoner med andre utvidelser. Har de mange shortcodes, etabler et lite navnerom eller klasse med konsekvente metodenavn.

Sikkerhet På Et Overordnet Nivå

  • All output må escapes med esc_html(), esc_attr(), esc_url() osv.
  • Valider og rens input: sanitize_text_field(), absint(), floatval() etter behov.
  • Anta at attributter og innhold kan være ondsinnet.
  • Unngå direkte databasekall – bruk WP_Query og forberedte spørringer via $wpdb ved behov.
  • Sett WP_DEBUG til true i utvikling for å fange feil tidlig.

Steg-For-Steg: Din Første Shortcode

En minimal shortcode krever én funksjon og én registrering. Viktig: funksjonen skal returnere en streng – ikke echo.


// I egen plugin eller i child-temaets functions.php

function min_shortcode($atts, $content = null) {

return '<div>' . esc_html($content) . '</div>':

}


add_shortcode('min_shortcode', 'min_shortcode'):

Registrer Med add_shortcode

add_shortcode(‘min_shortcode’, ‘min_shortcode’) kobler taggen [min_shortcode] til PHP-funksjonen min_shortcode(). Plasser dette i plugin-filen eller i child-temaet.

Returner HTML, Ikke Echo

WordPress forventer at shortcoden returnerer en streng som kan plasseres riktig i innholdet. Echo kan bryte layout, spesielt inne i lister, tabeller eller blokker. Return er alltid riktig.

Test I Innlegg Og Sider

I blokkredigereren: legg inn blokken «Shortcode» og skriv [min_shortcode]Tekst[/min_shortcode]. I klassisk editor kan taggen skrives rett i innholdet. Resultatet skal være en

med den escape-de innholdsteksten.

 

Avanserte Parametere: Attributter, Innhold Og Rensing

Bruk Av shortcode_atts Og Standardverdier

Attributter gjør shortcoden fleksibel. Definer standarder med shortcode_atts(), og husk validering/escaping.


function min_shortcode($atts, $content = null) {

$a = shortcode_atts([

'farge' => 'blå',

'størrelse' => '16px'

], $atts):


$farge = sanitize_text_field($a['farge']):

$size = sanitize_text_field($a['størrelse']):


return '<div style="color:' . esc_attr($farge) . ': font-size:' . esc_attr($size) . '">'
. esc_html($content) . '</div>':

}

Støtt Innhold Mellom Åpne Og Lukke-Tags

$content-parameteren inkluderer alt mellom [tag] og [/tag]. Den bør som hovedregel esc_html()’es, med mindre shortcoden bevisst skal støtte begrenset HTML – i så fall whitelist med wp_kses().

Validering, Escaping Og Output Buffering

  • Valider input før bruk. Konverter tall med absint()/floatval().
  • Escape alt som går ut i HTML-attributter/tekst.
  • For kompleks markup kan output buffering hjelpe:

function prefix_kortkode($atts){

ob_start():

?>

<section class="boks" aria-label="<?php echo esc_attr(__('Info-boks','domenet')): ?>">

<h3><?php echo esc_html(__('Tittel','domenet')): ?></h3>

</section>

<?php

return ob_get_clean():

}

Buffering holder koden ryddig, men ikke bruk den for å skjule unødvendig kompleksitet.

Dynamikk, Ytelse Og Integrasjon

Hent Data Med WP_Query Eller Eksterne API-Kall

For dynamisk innhold, bruk WP_Query til å hente innlegg/produkter etter taksonomi, meta eller dato. Ved eksterne API-er, bruk wp_remote_get() med tidsavbrudd og feilkontroll. Unngå tunge kall ved hvert sidevisning – cache er nøkkelen.

Eksempel, enkel loop:


$q = new WP_Query(['post_type' => 'post', 'posts_per_page' => 5]):

if ($q->have_posts()) {

while ($q->have_posts()) { $q->the_post():

echo '<li>' . esc_html(get_the_title()) . '</li>':

}

wp_reset_postdata():

}

Cache Resultater Med Transients

Transients reduserer belastning ved dyre spørringer og API-kall.


$key = 'prefix_top5':

$html = get_transient($key):

if (false === $html) {

// Bygg $html ...

$html = '<ul>…</ul>':

set_transient($key, $html, HOUR_IN_SECONDS):

}

return $html:

Bruk meningsfulle nøkler med prefiks. Husk å slette transienter ved innholdsoppdatering med passende hooks (f.eks. save_post).

Bruk I Blokkredigereren Og I PHP-Maler

I blokkredigereren brukes «Shortcode»-blokken. I PHP-maler kan de kjøre shortcodes slik: do_shortcode(‘[min_shortcode]Innhold[/min_shortcode]’). For renere maler kan funksjonen kalles direkte hvis den er designet for det, men do_shortcode() er tryggest for tags.

Feilsøking Og Vanlige Fallgruver

Aktiver WP_DEBUG Og Logg Problemer

I wp-config.php under utvikling:


define('WP_DEBUG', true):

define('WP_DEBUG_LOG', true):

define('WP_DEBUG_DISPLAY', false):

Sjekk wp-content/debug.log for PHP-notices og -feil. Bruk error_log() strategisk for å spore attributter og respons fra API-er.

Kollisjoner, Tilgangskontroll Og Sikkerhetshull

  • Kollisjoner: Bruk prefiks. Test med shortcode_exists(‘min_shortcode’) før registrering hvis flere kilder kan definere den.
  • Tilgang: Ikke eksponer sensitiv info. Bruk is_user_logged_in() og current_user_can() før beskyttet output.
  • XSS: Escape konsekvent. Whitelist kun det som må gjennom.
  • CSRF er mindre relevant for visningsshortcodes, men hvis shortcoden skriver skjemaer som poster, bruk nonces (wp_nonce_field / check_admin_referer).

Internasjonalisering, Tilgjengelighet Og SEO-Hensyn

  • Pakk synlige tekster i __() eller _e() og last textdomain i plugin.
  • Tilgjengelighet: Semantiske tags, kontrast, aria-* der det gir mening. Ikke gjem viktig info i title-attributter.
  • SEO: Sørg for at output rendres server-side (som shortcodes gjør), bruk riktige overskriftsnivåer og meningsfulle lenketekster. Unngå å blokkere innhold bak unødvendig JS.

Konklusjon

Shortcodes i WordPress gir redaktører superkrefter – når de er bygget riktig. Legg koden i riktig sted (helst plugin), bruk prefiks, valider og escape alt, og tenk caching fra dag én. Med shortcode_atts, WP_Query, transients og god i18n/a11y‑praksis blir resultatet både robust og raskt. Start lite, test i blokkredigereren, og bygg videre med trygghet.

Ofte stilte spørsmål om shortcodes i WordPress

Hva er shortcodes i WordPress, og når bør jeg bruke dem?

Shortcodes i WordPress er små tagger som blir til dynamisk HTML når siden rendres. De er nyttige når redaktører skal gjenbruke funksjonalitet uten å skrive PHP: lister, API-data, tabs, varsler eller kontrollerte spørringer. Velg blokker for rent visuelle behov; bruk shortcodes når funksjonen må fungere i eldre innhold, widgets og maler.

Hvor bør jeg legge koden for en shortcode – i plugin eller child-tema?

Legg egendefinerte shortcodes i en liten, egen plugin for modulær, tema-uavhengig kode som kan versjoneres og gjenbrukes. Bruk child-temaets functions.php bare dersom funksjonen er spesifikk for det temaet. Unngå hovedtema og tredjeparts-plugins – endringer kan forsvinne ved oppdateringer.

Hvordan lager jeg en sikker og rask shortcode i WordPress?

Registrer med add_shortcode og sørg for at funksjonen returnerer en streng. Rens og valider attributter (shortcode_atts, sanitize_text_field, absint), og escape all output (esc_html, esc_attr). Hent data via WP_Query, og cache dyre kall med transients. Test via Shortcode-blokken. Aktiver WP_DEBUG under utvikling.

Påvirker shortcodes SEO og Core Web Vitals?

Shortcodes i seg selv skader ikke SEO – de rendrer server-side, så innholdet indekseres. Effekt på Core Web Vitals avhenger av hva shortcoden gjør. Tunge spørringer eller API-kall kan bremse. Optimaliser med caching (transients), effektiv markup, lazy loading, og unngå unødvendig blokkerende JS/CSS.

Hvordan deaktivere eller erstatte shortcodes i WordPress uten å ødelegge innhold?

Fjern registreringen med remove_shortcode(‘tag’), eller legg inn en midlertidig fallback som returnerer tom streng for å unngå rå tagger. Planlegg migrering med WP-CLI search-replace, test i staging og tøm cache. Ved konflikt, bruk shortcode_exists før registrering eller gi ny tag med prefiks.