Zum Inhalt springen
Startseite » WP Snippets » Beiträge einer Kategorie über Shortcode anzeigen

Beiträge einer Kategorie über Shortcode anzeigen

An manchen Stellen kann es in einem Beitrag oder auf einer Seite sinnvoll sein, Beiträge einer bestimmten Kategorie anzeigen zu lassen.

// functions.php
function category_function($atts) {
    global $post;
    $post_id = $post->ID;
    ob_start();
    $attributes = shortcode_atts(array(
        "name" => "",
        "amount" => -1,
        "class" => ""
    ), $atts);
    echo "<div class=\"post-container post-preview-container " . $attributes["class"] . "\">";
    $args = array (
        'posts_per_page' => ($attributes["amount"] + 1),
        "category_name" => $attributes["name"]
    );
    $index = 0;
    $kb_custom_query = new WP_Query($args);
    while ($kb_custom_query->have_posts()) {
        $kb_custom_query->the_post();
        if($post->ID === $post_id || $index >= $attributes["amount"]) continue;
        $index++;
        get_template_part( 'template-parts/content/content', "excerpt-three" );
    }
    wp_reset_postdata();
    echo "</div>";
    return ob_get_clean();
}
add_shortcode('category', 'category_function');

Zusätzlich musst du die Datei content-excerpt-three.php mit folgendem Inhalt anlegen.

// template-parts/content/content-excerpt-three.php
<div class="entry-item" id="post-<?php the_ID(); ?>">
  <div class="post-entry">
    <a href="<?php the_permalink(); ?>" title="<?php the_title_attribute(); ?>"></a>
    <div class="content-container shorter">
      <?php the_title( sprintf( '<span><a href="%s">', esc_url(get_permalink())), '</a></span>' ); ?>
    </div>
  </div>
</div>

Den Shortcode kannst du dann im Backend wie folgt einfügen (name und class Parameter sind optional):

[category name="wordpress" amount="3" class="foobar"]

Im Code kannst du übrigens Shortcode über diese Funktion ausführen:

echo do_shortcode('[category name="wordpress" amount="3"]');

Bei der HTML Formatierung habe ich einige Klassen und Hintergrundbilder weggelassen, da ich sie spezifisch für meine Seite angepasst habe. Die kannst du natürlich entsprechend ergänzen und anpassen.