2 tilbagevendende problemer med custom queries

Man skal ikke have arbejdet ret længe med WordPress før man finder ud af at dét som i WordPress-regi kaldes custom queries er ret effektive, når man arbejder med templates. En custom query er dybest set en måde at tilpasse den datamængde som The Loop per default leverer, og kan eksempelvis bruges til kun at vise indlæg fra en eller flere givne kategorier. Det er også nødvendigt at bruge en custom query hvis du ønsker et Loop et sted hvor der ellers ikke er ét. Eksempelvis hvis du anvender et setup hvor selve bloggen på dit WP-drevne website kører via en Page-template.

Men med custom queries følger af og til et par problemer. Her er to scenarier, jeg ofte støder på når jeg udfører problemknusning for kunder.

More-tagget virker ikke

Hvis du har en custom query og bygger et Loop med den, og du ønsker at anvende more-tagget ganske som det plejer at virke i The Loop.. jamen så virker det ikke nødvendigvis. Det vil sige at når du kalder the_excerpt(), får du hele indlæggets tekst frem i stedet for kun den del af indlægget der står inden more-tagget. Det kan drive én til vanvid.

Løsningen er at indsætte følgende 2 linier et sted inden man påbegynder Loop’et:

global $more;
$more = 0;

Tags virker ikke

Samme problem som med more-tagget. Man ønsker at benytte the_tags(), men der kommer ingen tags frem, uanset hvad man gør. Der er to løsninger. Enten at kalde get_the_tags() med indlæggets ID i stedet for, eller – og det er dén version jeg anbefaler – at indsætte følgende 2 linier et sted inden man påbegynder Loop’et:

global $wp_query;
$wp_query->in_the_loop = true;

Disse to scenarier er ikke ligefrem supergodt dokumenteret nogle steder, så hvis man er “almindelig” bruger kan man risikere at bruge oceaner af tid på at finde både årsag og løsning til disse to problemer. Det er ikke nødvendigvis en god udnyttelse af ens tid :). Så hvis du døjer med mærkelige problemer som disse, skal du ikke holde dig tilbage for at kontakte mig. Der er stor chance for at jeg ved lige nøjagtig hvad der skal gøres.