WordPress more-Tag beeinflussen

Die Zeiten ändern sich.

Dieser Beitrag scheint älter als 15 Jahre zu sein – eine lange Zeit im Internet. Der Inhalt ist vielleicht veraltet.

Aktuell habe ich mal wieder an einem Theme gearbeitet und dabei ging es um ein Redesign eines Blog, der aktuell mehr als 1600 Beiträge hat – Sajonara.
Es soll aber nicht um das Design gehen, auch wenn ich sehr zu frieden bin, sondern um einige kleine WordPress Hacks, die ich dort unter anderem für das kommende WordPress Buch integriert und getestet habe. In diesem Zusammenhang werde ich ab und dann einen kleinen Hack vorstellen.

Heute möchte ich zeigen, dass der more-Tag nicht als Dogma zu verstehen ist, sonder sich auch sehr schön im Template beeinflussen lässt. Dabei war das Ziel, dass das Redesign auf der Startseite immer den aktuellen Beitrag komplett darstellt, egal was die Autoren im Backend machen. Dazu muss man den more-Tag deaktivieren bzw. beeinflussen. Dies kann man sehr einfach über die Variable $more, die mit dem Wert 1 dafür sorgt, dass es keinen Link zum Artikel gibt und damit der Artikel komplett ausgegeben wird.

Da es sich um nur einen Beitrag handelt und die Einstellungen des Backend nicht gezogen werden sollen, habe ich einen eigene Loop (new WP_Query) aufgebaut, der lediglich einen Beitrag holt, den Letzten (showposts=1).


have_posts()) : $my_query->the_post();
	$do_not_duplicate = $post->ID;
	$more = 1;
?>

Im Anschluss setze ich die Variable $do_not_duplicate mit der ID des letzten Beitrags, so dass ich im folgenden Loop diesen Post nicht nochmal auslese.
Der zweite Loop entspricht dann dem bekannten Code und wird lediglich um diese Variable erweitert, siehe nachfolgender Syntax.


ID == $do_not_duplicate ) continue; update_post_caches($posts); ?>

Auch im Zusammenspiel mit Conditional Tags kann man den more-Tag gezielt beeinflussen. Ich bin schon des öfteren auf die Mächtigkeit dieser Tags eingegangen und auch hier erweisen sie sich als nützlich.
In folgenden Beispiel wird der more-Tag nicht ausgegeben, wenn man auf der Startseite bzw. Frontpage des Blog ist und der Zähler des Loop nur einen Beitrag hat, ansonsten wird der Artikel mit more-Tag dargestellt.

Die beiden Loop im Zusammenspiel könnten dann zum Beispiel wie folgt aussehen.


have_posts() ) : $my_query->the_post();
	$do_not_duplicate = $post->ID;
	$more = 1;
?>
<div id="post->?php the_ID(); ?>" class="post"> 
<h2><a title="><?php the_title(); ?>" rel="bookmark" href="<?php the_permalink(); ?>"></a>

Da Micha es nochmal in den Kommentaren ansprach, hier eine Variante für die Ausgabe von zwei verschiedenen Darstellungen nicht mit zwei Loops, sondern durch einen Zähler $i, der eine Abfrage realisiert, ob es sich um den ersten Beitrag ($i === 1) handelt. Gespart werden damit 2 Queries und die Ausgabe ist die Gleiche, der letzte Post wird komplett dargestellt und die weiteren nur mit der Überschrift. Dabei schalten ich die Funktionsweise des more-Tag ab.


	have_posts()) : $my_query->the_post();
		$do_not_duplicate = $post->ID;
		$more = 1;
	?>
<div id="post->?php the_ID(); ?&gt;" class="post">
<h2><a title=">?php the_title(); ?&gt;" rel="bookmark" href="&lt;?php the_permalink() ?&gt;"></a></h2>
<div class="entry"></div>
</div>
<hr />

	ID == $do_not_duplicate ) continue; update_post_caches($posts); ?&gt;
<div id="post->?php the_ID(); ?&gt;" class="more-post">
<h2><a title=">?php the_title(); ?&gt;" rel="bookmark" href="&lt;?php the_permalink() ?&gt;"></a></h2>
</div>
<div class="navigation"></div>

Welche Version ihr besser versteht oder einsetzt, dass überlasse ich den Anwendern.

Von Frank Bültge

bueltge.de [by:ltge.de] wird von Frank Bültge geführt, administriert und gestaltet. Alle Inhalte sind persönlich von mir ausgewählt und erstellt, nach bestem Gewissen und Können, was die Möglichkeit von Fehlern nicht ausschließt.