Donnerstag, 28. Oktober 2010

Beiträge aus Wordpress-Datenbank direkt abrufen

Um eine Liste von Beiträgen in einer eigenen Webseite anzeigen zu können, greifen die meisten Webmaster auf den wordpresseigenen Feed zurück, und lesen diesen mit einer entsprechenden PHP-Routine in die eigene Webseite ein. Dieser Umweg belastet aber nur das Wordpress-System und enthält Fehlerquellen bei den Formatierungen. Einfacher ist ein direktes Auslesen der Datenbank.

Mit folgender Routinen lese ich die die ersten sieben Einträge aus der Datenbank in gekürzter Form und die restlichen Artikel nur als Überschrift auf:

1. Routine (listet die ersten sieben Artikel in verkürzter Form auf)



$blogpath = "http://www.regensburger-tagebuch.de/artikel/";
$sql = "SELECT
post_name,
post_date,
post_title,
post_content,
post_excerpt
FROM
wp_posts //je nach Suffix abaendern!
WHERE
post_type = 'post' AND
post_status = 'publish'
ORDER BY
post_date DESC
LIMIT 7
";
$result = mysql_query($sql);
$menge = mysql_num_rows ( $result );
$result = mysql_query($sql);
if(mysql_num_rows($result)){
while($row = mysql_fetch_assoc($result)){

$post_name=$row['post_name'];
$url=$blogpath.$post_name;
$post_title=$row['post_title'];
$post_date=$row['post_date'];
$post_content=$row['post_content'];
$trenner="<"."!"."--more--".">";
$post_content=str_replace("<p>$trenner</p>", $trenner, $post_content);

$tmp=explode($trenner, $post_content);
$tmp2=count($tmp); // fuer spaeter zu gebrauchen

$post_content=$tmp[0];
$post_content=strip_tags($post_content, "<br>");
// beseitigt alle Formatierungen ausser br, so dass beim Abschneiden des Textes
// keine unvollendeten Elemente herauskommen können; eine Alternative waere
// der Rueckgriff auf evtl. vorhandene Exzerpte.
 
$readmorelink="";
if(!empty($tmp[1])) $readmorelink="<p class='weiterlesenlink'><a href='$url'>Zum Artikel (weiterlesen) ...</a></p>";

echo "<div class='artikelauszug'>";
echo "<p class='posttitle'><a href='$url'>$post_title</a></p>";
echo "<p class='postcontent'>$post_content</p>";
echo $readmorelink;
echo "</div>";

}

}




2. Routine: listet alle Artikel (hier ab dem siebten Artikel) nur mit Titel auf. 

Diese Routine ist wesentlich einfacher, weil man nicht auf Formatierungsprobleme eingehen muss, die beim Abschneiden des ersten Content-Teiles entstehen können.

$blogpath = "http://www.regensburger-tagebuch.de/artikel/";
$sql = "SELECT
post_name,
post_date,
post_title
FROM
wp_posts  // je nach suffix evtl. abaendern
WHERE
post_type = 'post' AND
post_status = 'publish'
ORDER BY
post_date DESC
LIMIT 7, 10000 // beginnt ab dem achten Datensatz und geht sicherhetshalber nur bis zum 10.000sten Datensatz; den LIMIT-Befehl kann man auch ganz weglassen, dann erhält man alles

$result = mysql_query($sql);
$menge = mysql_num_rows ( $result );
$result = mysql_query($sql);
if(mysql_num_rows($result)){
while($row = mysql_fetch_assoc($result)){
$post_name=$row['post_name'];
$url=$blogpath.$post_name;
$post_title=$row['post_title'];
$post_date=$row['post_date'];
$post_date=substr($post_date, 0, 11);

echo "<div class='artikelliste'>";
echo "<p><a class='listentitel' href='$url'>$post_title</a></p>";
echo "<p style='font-size:0.8em'>Datum: $post_date </p>";

//$readmorelink="<p style='text-align:right'><a href='$url'>Zum Artikel</a></p>";
//echo $readmorelink;

echo "</div>";

}

}

Anzusehen z.B. bei:
www.regensburger-tagebuch.de/startseite.html (keine Wordpress-Seite)
www.regensburger-tagebuch.de/Archiv.html (auch keine Wordpress-Seite)
www.burkes.de/startseite.html (keine Wordpress-Seite)

Keine Kommentare: