Beiträge oben “festkleben”
Um Beiträge, wie die Begrüssung auf der Startseite, immer als erste anzuzeigen gibt es verschiedene Plugins.
Ich verwende AH Select Custom for WordPress 1.2 von Andrew Hall.
Das Plugin nutzt die benutzerdefinierten Felder, die zu einem Beitrag hinzugefügt werden können.
Um einen Beitrag oben “festzukleben” (in englischsprachigen Foren werden diese Art Beiträge als “sticky” = klebrig bezeichnet) fügt man in der erweiterten Editansicht ein benutzerdefiniertes Feld mit dem Namen “sticky” und dem Wert “1″ ein. Die erweiterte Ansicht kann in den Optionen unter Schreiben voreingestellt werden. ( “Bei Beginn eines Beitrags, zeige: Erweiterte Kontrollen”)
Die Beiträge “kleben” in ihren jeweiligen Kategorien oben. Auf der Startseite “kleben” nur die Beiträge der “Default”-Kategorie. Alle anderen erscheinen als normale Beiträge.
Die Installation läuft nach dem bekannten Muster, Plugin in Plugin-Ordner kopieren – aktivieren und die index.php anpassen, ab.
Nach dem Download und Entpacken des Plugin-Archivs wird zuerst die Datei ah_select_custom.php ins Plugin-Verzeichnis kopiert und über den Plugin-Manager aktiviert.
Für die Anpassung der index.php, öffnen wir diese mit einem Texteditor. Alternativ geht es auch über die WordPress-Verwaltungsoberfläche unter Templates. Vorraussetzung dazu ist, dass die Dateirechte auf Lesen und Schreiben (chmod 666) gesetzt sind.
Zunächst bnötigen wir eine Kopie der “Loop”. Das ist der Bereich in der index.php, der für die Anzeige der Beiträge zuständig ist. In der unveränderten Form sieht das so aus:
<?php if ($posts) : foreach ($posts as $post) : start_wp(); ?>
<?php the_date('','<h2>','</h2>'); ?>
<div class="post">
<h3 class="storytitle" id="post-<?php the_ID(); ?>"><a href="<?php the_permalink() ?>" rel="bookmark" title="Permanent Link: <?php the_title(); ?>"><?php the_title(); ?></a></h3>
<div class="meta"><?php _e("Filed under:"); ?> <?php the_category() ?> — <?php the_author() ?> @ <?php the_time() ?> <?php edit_post_link(); ?></div>
<div class="storycontent">
<?php the_content(); ?>
</div>
<div class="feedback">
<?php wp_link_pages(); ?>
<?php comments_popup_link(__('Comments (0)'), __('Comments (1)'), __('Comments (%)')); ?>
</div>
<!--
<?php trackback_rdf(); ?>
-->
<?php include(ABSPATH . 'wp-comments.php'); ?>
</div>
<?php endforeach; else: ?>
<p><?php _e('Sorry, no posts matched your criteria.'); ?></p>
<?php endif; ?>
Die Zeilennummern sind bei mir 31 bis 60. Diesen ganzen bereich kopieren wir und setzen ihn direkt davor wieder ein. Die “Loop” steht jetzt also zweimal hintereinander in der Datei.
Für unsere Zwecke verändern wir die obere Kopie.
Direkt davor kommt in eine neue Zeile
<?php select_customfield('sticky'); ?>
Wenn das benutzerdefinierte Feld anders benannt wurde, kommt dieser Wert als Parameter in den Funktionsaufruf. Man kann auch die Anzahl der “sticky”-Beiträge begrenzen. Bei einer maximalen Anzahl von 3 lautet die Funktion dann
<?php select_customfield('sticky', 3); ?>
Dann ersetzen wir in der ersten “Loop”
<?php if ($posts) : foreach ($posts as $post) : start_wp(); ?>
mit
<?php if ($sc_posts) : foreach ($sc_posts as $post) : start_wp(); ?>
Ausserdem noch
<?php endforeach; else: ?>
<p><?php _e('Sorry, no posts matched your criteria.'); ?></p>
<?php endif; ?>
mit
<?php endforeach; ?>
<?php endif; ?>
In der zweiten “Loop” muss auch noch etwas ergänzt werden damit die Beiträge nicht zweimal angezeigt werden.
Gleich nach
<?php if ($posts) : foreach ($posts as $post) : start_wp(); ?>
wird die Zeile
<?php if (sc_skipdupe ()) continue ?>
eingefügt.
Nun sollte alles funktionieren. Ich habe noch die Anzeige der “sticky”-beiträge angepasst, indem ich alles aus der ersten “Loop” entfernt habe, was mich dort gestört hatte, wie z.B. die Anzeige, wann der Beitrag verfasst wurde.