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.