Introduksjon til kategoribasert innleggshenting
Lær mer om profesjonell WordPress-utvikling hos WPPoland.
En av de vanligste oppgavene i WordPress-utvikling er å hente innlegg fra bestemte kategorier. Enten du bygger en tilpasset forsidelayout, oppretter en kategoriarkivmal eller viser relatert innhold, er forståelse av hvordan du effektivt spør etter innlegg per kategori essensiell for enhver WordPress-utvikler.
Denne omfattende guiden dekker flere tilnærminger til å hente innleggslister fra kategorier, fra enkle implementeringer til avanserte optimaliseringsteknikker.
Forstå WordPress-kategorier
Før vi dykker inn i koden, er det viktig å forstå hvordan WordPress håndterer kategorier:
- Kategorier er en innebygd taksonomi i WordPress
- Hvert innlegg kan tilhøre flere kategorier
- Kategorier kan være hierarkiske (forelder/barn-relasjoner)
- Kategoridata lagres i tabellene
wp_termsogwp_term_taxonomy - Innlegg-kategori-relasjoner lagres i
wp_term_relationships
Metode 1: WP_Query (den fleksible tilnærmingen)
WP_Query er WordPress sin primære klasse for å spørre etter innlegg. Den tilbyr maksimal fleksibilitet og brukes i nesten alle profesjonelle norske temaer.
Grunnleggende kategorisporring
$args = array(
'category_name' => 'news',
'posts_per_page' => 10,
'orderby' => 'date',
'order' => 'DESC'
);
$query = new WP_Query($args);
if ($query->have_posts()) {
while ($query->have_posts()) {
$query->the_post();
?>
<article>
<h2><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h2>
<div class="entry-content">
<?php the_excerpt(); ?>
</div>
</article>
<?php
}
wp_reset_postdata();
}
Sporring etter kategori-ID
$args = array(
'cat' => 5,
'posts_per_page' => 5
);
$query = new WP_Query($args);
Flere kategorier
// Innlegg i NOEN av disse kategoriene (ELLER-relasjon)
$args = array(
'category__in' => array(5, 10, 15),
'posts_per_page' => 10
);
// Innlegg i ALLE disse kategoriene (OG-relasjon)
$args = array(
'category__and' => array(5, 10),
'posts_per_page' => 10
);
// Ekskluder bestemte kategorier
$args = array(
'category__not_in' => array(3, 7),
'posts_per_page' => 10
);
Metode 2: get_posts() (den enkle tilnærmingen)
For enklere bruksområder gir get_posts() et mer direkte API. Den passer godt når du bare trenger en flat liste uten å forholde deg til hovedsløyfen.
$posts = get_posts(array(
'category' => 5,
'posts_per_page' => 10,
'orderby' => 'date',
'order' => 'DESC'
));
foreach ($posts as $post) {
setup_postdata($post);
?>
<article>
<h2><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h2>
</article>
<?php
}
wp_reset_postdata();
Metode 3: Shortcodes for innholdsredaktører
function category_posts_shortcode($atts) {
$atts = shortcode_atts(array(
'category' => '',
'posts' => 5,
'orderby' => 'date',
'order' => 'DESC'
), $atts);
$args = array(
'category_name' => $atts['category'],
'posts_per_page' => intval($atts['posts']),
'orderby' => $atts['orderby'],
'order' => $atts['order']
);
$query = new WP_Query($args);
ob_start();
if ($query->have_posts()) {
echo '<div class="category-posts-list">';
while ($query->have_posts()) {
$query->the_post();
?>
<article class="category-post">
<h3><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h3>
<p><?php the_excerpt(); ?></p>
</article>
<?php
}
echo '</div>';
}
wp_reset_postdata();
return ob_get_clean();
}
add_shortcode('category_posts', 'category_posts_shortcode');
Bruk: [category_posts category="news" posts="5"]
Metode 4: Modifisere hovedspørringen
function modify_category_queries($query) {
if ($query->is_category() && $query->is_main_query() && !is_admin()) {
$query->set('posts_per_page', 20);
}
}
add_action('pre_get_posts', 'modify_category_queries');
Ytelsesoptimalisering
1. Bruk transients for kostbare spørringer
function get_cached_category_posts($category_id, $count = 5) {
$cache_key = 'cat_posts_' . $category_id . '_' . $count;
$posts = get_transient($cache_key);
if (false === $posts) {
$args = array(
'cat' => $category_id,
'posts_per_page' => $count
);
$query = new WP_Query($args);
$posts = $query->posts;
set_transient($cache_key, $posts, HOUR_IN_SECONDS);
}
return $posts;
}
Vanlige fallgruver å unngå
- Ikke tilbakestille innleggsdata: Kall alltid
wp_reset_postdata()etter tilpassede sløyfer, ellers risikerer du at oppfølgende kall til hovedsløyfen returnerer feil data. - Spørre ved hver sidelasting: Bruk caching (transients eller objektcache) for kostbare spørringer mot kategorier med mye innhold.
- Ikke sjekke om innlegg finnes: Verifiser alltid
have_posts()før du går inn i sløyfen, ellers feiler tema-tag-kallene stille. - Modifisere hovedspørringen feil: Bruk
pre_get_posts-handlingen i stedet for å opprette nye spørringer på toppen av den eksisterende.
Konklusjon
WordPress tilbyr flere måter å hente innlegg fra kategorier på:
- WP_Query: best for komplekse, tilpassede visninger med multipel filtrering
- get_posts(): ideell for enkle innleggslister i widgets eller relaterte-saker-bokser
- Shortcodes: perfekt for fleksibilitet i Gutenberg eller klassisk redaktør
- pre_get_posts: essensiell for å modifisere arkivsider uten å duplisere kode
Husk å alltid vurdere ytelse, spesielt på nettsteder med store mengder innhold. Implementer caching-strategier og test spørringene dine med verktøy som Query Monitor.


