Hvordan sjekke om et innlegg tilhører en bestemt taksonomi-term?
NB

Hvordan sjekke om et innlegg tilhører en bestemt taksonomi-term?

Sist verifisert: 6. august 2026
3 min lesetid
Veiledning
Full-stack-utvikler

En vanlig oppgave for en utvikler er å vise et element (f.eks. et reklamebanner) kun hvis innlegget tilhører en bestemt kategori eller taksonomi (f.eks. ‘Filmsjanger: Komedie’).

I WordPress har vi to hovedfunksjoner for dette som ofte forveksles: is_tax() og has_term(). Forskjellen mellom dem er avgjørende for logikken i temaet ditt.


#1. Is_tax() vs has_term(), Hva er forskjellen?

#Is_tax(), Sidekontekst (arkiv)

Bruk denne for å sjekke hvilken side brukeren ser på.

  • Er brukeren inne på arkivsiden for kategorien “Skrekk”?
if ( is_tax( 'sjanger', 'skrekk' ) ) {
    echo 'Du er på skrekkfilmlisten!';
}

Denne funksjonen returnerer false hvis du er inne på et enkeltinnlegg (Single Post), selv om det innlegget faktisk er en skrekkfilm!

#Has_term(), Innleggskontekst (single)

Bruk denne for å sjekke hva som er tilordnet et spesifikt innlegg.

  • Er denne spesifikke filmen en “Skrekkfilm”?
if ( has_term( 'skrekk', 'sjanger' ) ) {
    echo 'Dette innlegget er en skrekkfilm.';
}

Denne funksjonen brukes oftest inni The Loop eller i filen single.php.


#2. Hierarkiproblemet (foreldre og barn)

Den største utfordringen er at has_term() kun sjekker nøyaktig den termen du angir.

Anta denne strukturen:

  • Filmer (Taksonomi: movie_genre)
    • Komedie (ID: 10)
      • Romantisk (ID: 11)
      • Mørk komedie (ID: 12)

Hvis du har et innlegg som KUN er tilordnet “Romantisk”, vil sjekken:

has_term( 'komedie', 'movie_genre' ) 

returnere FALSE. Hvorfor? Fordi innlegget teknisk sett ikke har avkrysningsboksen “Komedie” valgt, bare “Romantisk”.

#Løsning: Hjelpefunksjon for etterkommere

For å sjekke om et innlegg tilhører kategorien “Komedie” ELLER noen av dens underkategorier, må vi skrive en egen hjelpefunksjon.

/**
 * Sjekker om et innlegg tilhører et term eller dets barn.
 */
function wppoland_in_term_tree( $term_id_or_slug, $taxonomy, $post_id = null ) {
    $post_id = $post_id ? $post_id : get_the_ID();
    $term    = get_term_by( is_numeric($term_id_or_slug) ? 'id' : 'slug', $term_id_or_slug, $taxonomy );

    if ( ! $term ) {
        return false;
    }

    // 1. Sjekk direkte tilordning (raskest)
    if ( has_term( $term->term_id, $taxonomy, $post_id ) ) {
        return true;
    }

    // 2. Hent alle barn av termen
    $children = get_term_children( $term->term_id, $taxonomy );
    
    if ( is_wp_error( $children ) || empty( $children ) ) {
        return false;
    }

    // 3. Sjekk om innlegget har noen av barna
    return has_term( $children, $taxonomy, $post_id );
}

#Bruk:

// I single.php
if ( wppoland_in_term_tree( 'komedie', 'movie_genre' ) ) {
    get_template_part( 'partials/banner-comedy' );
}

#3. Ytelsesoptimalisering

Funksjonen get_term_children() utfører en databasespørring. Hvis du bruker dette i en løkke som viser 50 innlegg, gjør du 50 ekstra SQL-spørringer.

En viktig optimalisering er å sende ID i stedet for Slug. WordPress må slå opp ID-en fra Slug-en uansett, så ved å oppgi ID-en (f.eks. 10) sparer du en spørring.

// Raskere (ID)
has_term( 10, 'movie_genre' );

// Tregere (Slug -> krever oppslag)
has_term( 'komedie', 'movie_genre' );

#Oppsummering

  1. Bruk is_tax() kun for å sjekke om du er på en arkivside.
  2. Bruk has_term() for logisk sjekk av enkeltinnlegg.
  3. Husk at has_term ikke arver, hvis du trenger “kategori og barn”-logikk, bruk en egendefinert hjelpefunksjon.

Utforsk våre profesjonell WordPress-utvikling for å ta prosjektet ditt videre.

Neste steg

Gjør artikkelen om til faktisk implementering

Denne blokken styrker intern lenking og sender leseren videre til de mest relevante tjenestene og innholdet.

Vil du få dette implementert på nettstedet ditt?

Hvis du vil gjøre kunnskapen i artikkelen om til konkrete forbedringer, redesign eller en tydelig leveranseplan, kan jeg ta det videre.

Relevant klynge

Utforsk andre WordPress-tjenester og kunnskapsbase

Styrk virksomheten din med profesjonell teknisk støtte innen kjerneområdene i WordPress-økosystemet.

Artikkel-FAQ

Ofte stilte spørsmål

Praktiske svar for å bruke temaet i faktisk arbeid.

SEO-readyGEO-readyAEO-ready3 Q&A
Hva er forskjellen på has_term() og is_tax()?#
has_term() sjekker om et bestemt innlegg er knyttet til en term, mens is_tax() sjekker konteksten til gjeldende arkivside. De løser ulike problemer og bør ikke brukes om hverandre.
Hvordan tar jeg med underordnede termer i sjekken?#
Du trenger som regel en hjelpefunksjon som utvider den overordnede termen med get_term_children() og deretter sjekker innlegget mot hele termtreet.
Bør jeg bruke ID-er eller slugger i taksonomibetingelser?#
ID-er er som regel litt mer effektive og mindre skjøre, særlig i større prosjekter eller der slugger kan endres under lokalisering.

Trenger du FAQ tilpasset bransje og marked? Vi lager en versjon som støtter dine forretningsmål.

Ta kontakt

Relaterte artikler