Ich fand das schon immer gut, so einen Blog im Blog. Man nennt das Micro Blog, wenn ich das richtig verstanden habe. Ich meine, so ein Ding für kurze Notizen, die ohne Featured Images auskommen 🦊 und die tendenziell sehr kurz gehalten sind.
Heute sehe ich das eher selten. Vielleicht habe ich auch nicht darauf geachtet. Auf der Seite „Kraut.press“ fiel mir in der Navigation der Punkt „Micro Blog“ auf.
Wenn ich solche Dinge sehe, triggert mich das – schon immer. Ob es sich um schöne Design-Elemente handelt, einschließlich der Typografie, oder den Umgang mit Grafiken und Fotos innerhalb eines Blogs. Wahrscheinlich ist dies der Grund dafür, dass ich in den letzten Jahren bei GeneratePress als Theme geblieben bin. Das Theme ist derart anpassungsfähig und flexibel, dass aus meiner Sicht nichts zu wünschen übrig bleibt.
Dabei ist mir durchaus bewusst, dass es längst zahlreiche andere WordPress-Themes gibt, die ihre Vorzüge haben und die sich auch in Tests ebenbürtig zeigen. Was ich sagen wollte: Früher habe ich die Themes ständig ausgetauscht. Seit ich mit GeneratePress und GenerateBlocks arbeitet, bin ich dabei geblieben. In meinem Fall heißt das schon etwas. 😍
Zurück zum Micro Blog.
Es gibt nur wenige Plug-ins, die man für eine solche Lösung einsetzen könnte. Eines habe ich ausprobiert, es erzeugte gleich bei der Installation einen schwerwiegenden Fehler, so dass ich es via FTP wieder gelöscht habe. Das kommt nur selten vor, obwohl ich ständig neue Plug-ins ausprobiere. Wenn ein gravierender Fehler dieser Art auftritt, ist mein Vertrauen schnell bei null.
Ich überlegte also, wie ich das mithilfe von ChatGPT angehen könnte. Schnell war ich bei dem Gedanken, eine eigene Kategorie zu erschaffen, die nur für die Inhalte des Micro Blogs vorgesehen ist.
Folgende Kriterien sollten erfüllt werden:
- Beiträge mit dieser Kategorie werden weder auf der Startseite, noch in der Blogübersicht angezeigt.
- Bei der Suche sind die Artikel ausgeschlossen (müsste eigentlich nicht sein, wollte ich aber so).
- Beim Blättern in Einzel-Blogbeiträgen werden die Beiträge dieser Kategorie übersprungen.
- Es werden keine RSS-Feeds erzeugt, die Artikel erscheinen nicht im Feed-Reader
- Die Artikel haben kein Beitragsbild und sind gewöhnlich sehr kurz gehalten. Ihr wisst, wie blöd es ausschaut, wenn man auf der Start- oder Blogseite ab und zu keine Beitragsbilder sieht. Natürlich kommt das aufs Layout an und manche verzichten ja auch generell auf die Anzeige von Featured Images.
Den Code für diese Bedingungen habe ich in meine functions.php (Child-Theme) eingefügt.
function exclude_category_1515_everywhere_except_direct_category( $query ) {
if ( !is_admin() && $query->is_main_query() ) {
// 1️⃣ Ausnahme: Wenn die Kategorie 1515 direkt aufgerufen wird, bleibt alles sichtbar
if ( is_category( 1515 ) ) {
return;
}
// 2️⃣ Einzelartikel: Blättern zwischen Artikeln (Previous/Next Post Navigation)
if ( is_single() ) {
$query->set( 'category__not_in', array( 1515 ) );
}
// 3️⃣ Alle anderen Bereiche blockieren Kategorie 1515
if ( is_front_page() || is_home() || is_search() || is_feed() || is_archive() || is_tag() ) {
$query->set( 'category__not_in', array( 1515 ) );
}
// 4️⃣ GenerateBlocks-Query absichern
if ( isset( $query->query_vars['post_type'] ) && $query->query_vars['post_type'] === 'post' ) {
$query->set( 'category__not_in', array( 1515 ) );
}
}
}
add_action( 'pre_get_posts', 'exclude_category_1515_everywhere_except_direct_category' );
Um die Artikel des Micro Blogs (Kategorie: Notiz) beim Blättern auf den Blog- und Archivübersichtsseiten auszublenden (zu überspringen) wurde dieser Code erzeugt und ebenfalls in die functions.php (Child-Theme) eingefügt.
function filter_adjacent_post_navigation( $where ) {
global $wpdb;
if ( is_single() ) {
$where .= $wpdb->prepare( " AND p.ID NOT IN (SELECT object_id FROM $wpdb->term_relationships WHERE term_taxonomy_id = %d)", 1515 );
}
return $where;
}
add_filter( 'get_previous_post_where', 'filter_adjacent_post_navigation' );
add_filter( 'get_next_post_where', 'filter_adjacent_post_navigation' );
Ich wollte außerdem eine Beitragsnavigation implementieren, die nur Artikel des Micro Blogs (Kategorie: Notiz) berücksichtigt, alle übrigen Artikel also beim Blättern überspringt. Das war nicht ganz leicht und brauchte einige Versuche. Diese Lösung ist im Vergleich zum Rest etwas umfangreich. Aber sie funktioniert:
function category_navigation_shortcode() {
if ( !is_single() || !has_category( 1515 ) ) {
return ''; // Navigation nur in Einzelbeiträgen von Kategorie 1515 anzeigen
}
global $post;
// Vorheriger Beitrag in Kategorie 1515 abrufen
$prev_post = get_adjacent_post(true, '', true, 'category');
if ( empty($prev_post) ) {
$prev_post = get_posts(array(
'category' => 1515,
'posts_per_page' => 1,
'orderby' => 'date',
'order' => 'DESC',
'date_query' => array(
array(
'before' => get_the_date('Y-m-d H:i:s', $post),
),
),
));
$prev_post = !empty($prev_post) ? $prev_post[0] : null;
}
// Nächster Beitrag in Kategorie 1515 abrufen
$next_post = get_adjacent_post(true, '', false, 'category');
if ( empty($next_post) ) {
$next_post = get_posts(array(
'category' => 1515,
'posts_per_page' => 1,
'orderby' => 'date',
'order' => 'ASC',
'date_query' => array(
array(
'after' => get_the_date('Y-m-d H:i:s', $post),
),
),
));
$next_post = !empty($next_post) ? $next_post[0] : null;
}
// HTML für Navigation generieren
$output = '<div class="custom-category-navigation" style="display: flex; justify-content: space-between; padding: 15px; border-top: 1px solid #ddd; margin-top: 20px;">';
if ($prev_post) {
$output .= '<div class="prev-post">
<a href="' . get_permalink($prev_post->ID) . '" style="text-decoration: none; font-weight: bold; color: #0073aa;">
← ' . get_the_title($prev_post->ID) . '
</a>
</div>';
} else {
$output .= '<div class="prev-post" style="color: #aaa;">← Kein vorheriger Beitrag</div>';
}
if ($next_post) {
$output .= '<div class="next-post">
<a href="' . get_permalink($next_post->ID) . '" style="text-decoration: none; font-weight: bold; color: #0073aa;">
' . get_the_title($next_post->ID) . ' →
</a>
</div>';
} else {
$output .= '<div class="next-post" style="color: #aaa;">Kein nächster Beitrag →</div>';
}
$output .= '</div>';
return $output;
}
add_shortcode('category_navigation', 'category_navigation_shortcode');
Die Gestaltung der Übersichtsseite für den Micro Blog (Kategorie: Notiz) habe ich mit GenerateBlocks erstellt. Generell ist es wichtig zu erwähnen, dass ich in meine Anforderungen ChatGPT (iterative Schritte) den Hinweis aufgenommen habe, dass ich GeneratePress und GenerateBlocks verwende.
Was ich noch sagen will: Dieses Beispiel soll als Inspiration dienen.
Ich gehe nicht davon aus, dass das einfache Kopieren der Codes direkt zu befriedigenden Ergebnissen führt. Es sei denn, man nutzt z.B. ebenfalls GeneratePress und GenerateBlocks.
Hier im Blog werden bei Abgabe von Kommentaren keine IP-Adressen gespeichert! Deine E-Mail-Adresse wird NIE veröffentlicht! Du kannst anonym kommentieren. Dein Name und Deine E-Mail-Adresse müssen nicht eingegeben werden.