geschrieben von Micha am 21. Oktober 2008 | 9 Kommentare
Nach meiner Post gestern und ein paar Mails in der wp-testers Mailingliste versuche ich nun darzustellen, was eine Sticky Post so anrichtet.

Falscher Count der Posts
Möchte ich zum Beispiel 6 Posts auf einer Seite darstellen, verwende ich query_posts(‘showposts=6′); Sind aber eine oder mehrere Posts “sticky”, werden die hinzugezählt. Also müssen wir die Anzahl der sticky Posts ermitteln.
get_option(‘sticky_post’)(danke Frank) liefert ein Array mit den als sticky gekennzeichneten Posts zurück, welches wir counten.
$sticky = count(get_option('sticky_posts'));
query_posts('showposts='. ( 6 - $sticky ));
Sticky Posts weiterhin in der chronologischen Auflistung der Posts
Das Nächste, was es zu beachten gilt, sind die CSS-Klassen für die Posts. post_class() gibt der Post die entsprechenen Klassen, die im CSS verwendet werden können. Im Falle einer Sticky Post unter anderem die Klasse “sticky”. Wer nun denkt, ich gebe der Klasse sticky einen roten Hintergrund mit einem schwarzen Rahmen und schon habe ich einen schönen Teaser, der wird, wenn er weiterblättert, eine Entäuschung erleben, da diese Sticky Posts auch in der normalen Beitrags-Chronologie erscheinen und dort ebenfalls die Klasse “sticky” besitzen (also roter Hintergund mit schwarzem Rahmen). Nicht wirklich cool.
Kill the Sticky
Will man im Theme keine Sticky Posts haben oder zulassen, einfach im Template notieren:
update_option('sticky_posts', array());
und schon sind sie dahin…
Kurz gesagt ist die Funktion mit den Sticky-Post relativ sinnbefreit und umständlich fürs erste?
Für mein Verständnis wurde eine Funktionalität eingeführt, die nicht richtig durchdacht wurde. Der “normale” Nutzer wird damit kaum in Berührung kommen. Nur wenn du Themes schreibst, oder spezielle Anpassungen, dann mußt du dir den Kopf zerbrechen, wie du damit umgehst.
Mehr wollte ich ja auch nicht ausdrücken. Es wurde wieder mal eine Funktion in WordPress eingebaut die nicht richtig durchdacht wurde.
Also die bisherige Theme-API ist sowieso mehr als grausig für mich. Viel mehr werd ich mir da den Kopf nicht zerbrechen als das letzte mal!
Aber schön, dass du nun die Lösung teilst.
Ich hatte gerade Gespräche mit Anwender, denen gefällt es gerade so, also + die Anzahl der Stickys + die laufende Postausgabe. Vermutlich werden sich an solchen Themen immer die Geister scheiden. Aber man hätte ja einen Template Tag hinzufügen können, dann wäre es als Theme-Autor einfacher.
gerade aufgefallen, ich würde den Wert nicht direkt setzen. Eventuell soll ja die Einstellung via Backend genutzt werden.
statt 6 wäre es dann
get_option('posts_per_page')sehe ich nicht so. In einer normalen index.php ist das auch Wurscht, denke ich. gebe ich aber explizit 6 Posts an dh., ich denke mir ja was dabei, dann hat es das System auch gefälligst so zu machen. Dafür ist ja showposts wohl auch da.
Fakt ist, die haben es halbherzig intergriert, zu Risiken und Nebenwirkungen fragen sie Herrn Bültge oder mich
… oder fressen sie den codex und erschlagen sie die…
Ich denke, die neuen Themes werden aufgrund der Vereinfachungen der WP-Devs nicht unbedingt einfacher werden, da man jetzt wohl viele Sachen ‘zu Fuss’ coden muss…
für Designer wird da gar nichts einfacher – denn: der neue template tag, post_class hat auch die class für die sticky drin,
die steht weit hinten -logischerweise
mag ich jetzt in Archivansichten keine sticky Formatierung muss ich dort ein anderes div drumherum geben, sonst gehts net … Quellcodeaufblähungsaktion nenn ich das
oder mag man bei den Kommentaren was sprachlich ändern , muss man die Funktion umschreiben – (soifz)
lg
Du kannst post_class selbst beeinflußen und auch eigene Klassen einbinden.
post_class('myclass, mysecondclass','')zu den Kommentaren: da werden wir nicht drumrum kommen.