Zufallsbeiträge per Shortcode ausgeben in WordPress

Mit einem kleinen WordPress PHP-Snippet und dem dazugehörigen Shortcode ist es möglich, Zufallsbeiträge aus einem bestimmten Zeitraum, z.B. Beiträge der letzten 6 Monate, auf einer Website darzustellen. Die Anzahl der Zufalls-Beiträge und der Zeitraum lässt sich dabei ganz einfach anpassen.

Du kannst diesen Code in die functions.php-Datei deines aktiven WordPress-Themas einfügen. Um den Code dann auf deiner Website in einer Seite oder einem Beitrag zu verwenden, füge dort einfach den Shortcode [random_posts] ein. Der Shortcode gibt dann 10 zufällige Beiträge aus den letzten 6 Monaten aus. Du kannst die Einstellungen im Code anpassen, indem die posts_per_page-Option und das strtotime-Array abgeändert werden.

In diesem Code wird der Funktion strtotime eine Zeichenkette von '6 months ago' übergeben, um einen festen Zeitraum von 6 Monaten ab dem aktuellen Datum zu generieren. Da es sich ja um eine zufällige Auflistung handeln soll, welche die Reihenfolge der Beiträge bei jedem Aufruf der Website auch zufällig wieder verändert, wird die Sortierung per 'orderby' => 'rand', ausgegeben. Das „rand“ steht dabei für „random“, also zu Deutsch „zufällig“. Die Sortierung kann natürlich bei Bedarf auch verändert werden, dazu gibt es verschiedene orderby-Parameter in WordPress, z.B. nach Title, Post-ID, Author usw.

Um auch das Beitragsbild der Beiträge mit auszugeben, wird die get_the_post_thumbnail_url()-Funktion verwendet. Die ausgegebene URL wird dann in ein img-Tag eingefügt, das mit der entsprechenden CSS-Klasse formatiert werden kann.

Der Code für die functions.php des Themes:

function random_posts_from_last_6_months() {

  // Set the query arguments
  $args = array(
    'post_type' => 'post',
    'posts_per_page' => 10,
    'orderby' => 'rand',
    'date_query' => array(
      array(
        'after' => strtotime( '6 months ago' ),
      ),
    ),
  );

  // Run the query
  $query = new WP_Query( $args );

  // Check if there are any posts
  if ( $query->have_posts() ) {

    // Start the output
    $output = '<ul class="random-posts">';

    // Loop through the posts
    while ( $query->have_posts() ) {
      $query->the_post();

      // Get the post title, link, and image
      $title = get_the_title();
      $link = get_permalink();
      $image = get_the_post_thumbnail_url( null, 'medium' );

      // Add the post to the output
      $output .= '<li>';
      $output .= '<a href="' . $link . '">';
      if ( $image ) {
        $output .= '<img src="' . $image . '" alt="' . $title . '">';
      }
      $output .= '<h2>' . $title . '</h2>';
      $output .= '</a>';
      $output .= '</li>';
    }

    // End the output
    $output .= '</ul>';

    // Reset the post data
    wp_cmsriereset_postdata();

  } else {

    // If there are no posts, display a message
    $output = 'Sorry, no posts found.';

  }

  // Return the output
  return $output;

}

// Add a shortcode to use the function in a post or page
add_shortcode( 'random_posts', 'random_posts_from_last_6_months' );

Die Ausgabe mit CSS formatieren

Möchte man die Ansicht der Zufallsbeiträge noch schöner gestalten, kann man dafür CSS verwenden. Im Beispiel verwenden wir die CSS-Klasse .random-posts, um das Styling per CSS zu ändern.

.random-posts {
  list-style: none;
  margin: 0;
  padding: 0;
}

.random-posts li {
  margin-bottom: 20px;
}

.random-posts a {
  display: block;
  text-decoration: none;
}

.random-posts img {
  max-width: 100%;
  height: auto;
  margin-bottom: 10px;
}

Zufalls-Beiträge einer oder mehrerer Kategorien ausgeben per Shortcode

Nur die Beiträge einer oder mehrerer Kategorien auszugeben, ist ebenfalls möglich. Der Shortcode [random_posts] bleibt der Gleiche. In diesem aktualisierten PHP-Code wird dann aber noch eine Auswahl von Kategorie-Slugs verwendet. Hier musst Du einfach die Slugs der gewünschten Kategorien ersetzen. Wenn du beispielsweise die Kategorien ‚Reisen‘, ‚Essen‘ und ‚Musik‘ verwenden möchtest, würde das category_name-Argument so aussehen:

function random_posts_from_last_6_months() {

    // Set the query arguments
    $args = array(
        'post_type' => 'post',
        'posts_per_page' => 10,
        'orderby' => 'rand',
        'date_query' => array(
            array(
                'after' => strtotime( '6 months ago' ),
            ),
        ),
        'category_name' => array( 'reisen', 'essen', 'musik' ), // Ersetzen Sie 'slug1', 'slug2' usw. durch die Slugs Ihrer Kategorien
    );

    // Run the query
    $query = new WP_Query( $args );

    // Check if there are any posts
    if ( $query->have_posts() ) {

        // Start the output
        $output = '<ul class="random-posts">';

        // Loop through the posts
        while ( $query->have_posts() ) {
            $query->the_post();

            // Get the post title, link, and image
            $title = get_the_title();
            $link = get_permalink();
            $image = get_the_post_thumbnail_url( null, 'medium' );

            // Add the post to the output
            $output .= '<li>';
            $output .= '<a href="' . $link . '">';
            if ( $image ) {
                $output .= '<img src="' . $image . '" alt="' . $title . '">';
            }
            $output .= '<h2>' . $title . '</h2>';
            $output .= '</a>';
            $output .= '</li>';
        }

        // End the output
        $output .= '</ul>';

        // Reset the post data
        wp_cmsriereset_postdata();

    } else {

        // If there are no posts, display a message
        $output = 'Sorry, no posts found.';

    }

    // Return the output
    return $output;

}

// Add a shortcode to use the function in a post or page
add_shortcode( 'random_posts', 'random_posts_from_last_6_months' );

Schreibe einen Kommentar