WordPress: Alle Seiten mit bestimmtem benutzerdefiniertem Feld lesen

Neben der einfachen Erstellung des Loops mit query_posts so wie hier beschrieben http://www.guru-20.info/2011/03/13/den-loop-mit-benutzerdefinierten-feldern-erstellen kann es manchmal auch praktisch sein, den SQL-String selbst zu programmieren.

Beim folgenden Beispiel sollen die Artikelbilder nur bestimmter Seiten auf der Startseite der Website ausgegeben werden. Wenn man auf das Bild klickt, wird man auf die Seite weitergeleitet.

Das Benutzerdefinierte Feld heißt “Startseiten-Bild” und als Wert wird einfach “1″, “2″, “3″,… eingegeben um eine Reihenfolge festzulegen.

global $wpdb;

$select = “SELECT p.ID, p.post_title, m.meta_value AS startseiten_nummer “;
$select .= “FROM ” . $wpdb->prefix . “posts as p “;
$select .= “INNER JOIN ” . $wpdb->prefix . “postmeta AS m ON ( p.ID = m.post_id ) “;
$select .= “WHERE p.post_type = ‘page’ “;
$select .= “AND p.post_status = ‘publish’ “;
$select .= “AND m.meta_key = ‘Startseiten-Bild’ “;
$select .= “ORDER BY m.meta_value”;

$pages = $wpdb->get_results($select);

if ($pages) {
echo “<div>”;
foreach ($pages as $page) {
// echo $page->post_title . “: ” . $page->startseiten_nummer;

echo “<a href=’” . get_permalink($page->ID) . “‘>”;

$attr = array(‘alt’    => ‘Zur Seite ‘ . $page->post_title . ‘…’,
‘title’    => ‘Zur Seite ‘ . $page->post_title . ‘…’);

echo get_the_post_thumbnail($page->ID, ‘full’, $attr);
echo “</a>”;
}
echo “</div>”;
}