Wordpress: De laatste 10 posts met een reactie
Al weer enkele weken staan in de sidebar op deze site de laatste 10 reacties. Om volledig te zijn: Er staan links naar de laatste 10 posts waarin deze reacties staan. Op zich natuurlijk prima en prettig om meteen duidelijk te hebben op welke posts het laatst een reacties is gekomen. Het enige wat ik echter minder vond is dat de volledige naam van de post inclusief de naam van de gene die gereageerd heeft geplaatst werd. Hierdoor namen m.i. de linkjes naar de reacties onnodig veel ruimte in op de sidebar. Ik zeg bewust mijns inziens, daar dit uiteraard persoonlijk is.
Omdat ik de linkjes naar de posts waarop gereageerd wordt wel wil laten staan, maar er dus voor wil zorgen dat ze wat minder ruimte innemen, heb ik een kleine functie in php geschreven die een linkje plaatst naar de laatste 10 posts waarop gereageerd is. Wanneer de titel van de post echter meer ruimte inneemt als er op één regel in de sidebar is, wordt de tekst afgekapt. Hierdoor nemen de linkjes naar de reacties nooit meer als 10 regels in beslag. Ruimte probleem opgelost dus. Verder vind ik het ook een stuk opgeruimder ogen. Het resultaat van mijn php gerommel zie je rechts op deze site in de sidebar onder het kopje “laatste reacties”. Mocht je ook een website hosten die op Wordpress draait en ook intresse in deze functionaliteit hebben, dan bij deze een kleine how to over hoe dit te bereiken.
Om het resultaat zoals hierboven beschreven staat te bereiken zijn er verschillende mogelijkheden. Deze howto beschrijft de eenvoudigste en meest flexibele manier: De extra in php geschreven code via een widget toevoegen aan de sidebar. Wellicht dat je denkt waarom via een widget. Daar de standaard text widget die in Wordpress aanwezig is alleen plain tekst en html kan uitvoeren. Dat is inderdaad zo. Er zijn echter enkele plugins die het mogelijk maken om een widget toe te voegen waarmee php code uitgevoerd kan worden. Het voordeel van het gebruik van je extra php code in een widget is dat je extra functionaliteit gemakkelijk in je sidebar kan stoppen en terug kan laten komen waar je wil, zonder dat dit het gebruik van andere widgets eventueel beinvloed.
Zoals gezegd, zijn er verschillende plugins die het mogelijk maken om php code uit te voeren in een widget. In deze howto ga ik uit van de “Samsarin PHP widget” plugin. De plugin kan je via deze link downloaden.
Wanneer de plugin geinstalleerd en geactiveerd is, tref je onder het kopje “Weergave”, “widgets” de “Samsarin PHP widget” aan:

Wanneer je deze widget vervolgens op de gebruikelijke manier naar één van je sidebars sleept, kan je deze dus gewoon een titel geven. In het tekstvak kan je zoals je al wel verwachtte dus php code inbrengen. Deze code wordt vervolgens netjes uitegevoerd bij het laden van de site. Het moge overigens duidelijk zijn dat het verstandig is om eerst zeker te zijn van de code die je hier typed. Eventuele fouten kunnen er toe lijden dat je site niet meer geladen wordt.

Ok nu is duidelijk hoe de php code uitgevoerd kan worden. Wellicht dat dit voor sommige voldoende info is, daar zij zelf met php hun eigen opties toevoegen aan een site. Voor de gene die graag de php code willen hebben om de laatste 10 reacties te plaatsen, zoals ik dat op deze site doe, hier komt ie:
<?php
function LastReactions() {
global $wpdb;
$fivesdrafts = $wpdb->get_results("
SELECT
c.comment_author,
p.post_title,
p.guid
FROM wp_comments c,
wp_posts p
WHERE p.id = c.comment_post_ID
AND c.comment_approved = 1
ORDER BY c.comment_date DESC
LIMIT 10
");
echo "<ul>";
foreach ($fivesdrafts as $fivesdraft) {
$NieuweText = $fivesdraft->post_title;
if(strlen($NieuweText) > 25)
{
$NieuweText = rtrim(substr($NieuweText,0,25))."...";
}
echo "<li>";
echo "<a href=\"";
echo $fivesdraft->guid;
echo "\">";
echo $NieuweText;
echo "</a>";
echo "<br/>";
echo "</li>";
}
echo "</ul>";
}
?>
<?php LastReactions(); ?>
Even een korte toelichting. Zoals je ziet op regel 2 en drie stop ik het geheel in een functie en haal ik het object $wpdb aan. Dit $wpdb object zorgt voor de communicatie met de Wordpress database.
Regel 5 t/m 16
Hier draaien we de selectie query om de gegevens op te halen (de titels van de laatste 10 posts waarop gerageerd is). Het resultaat daarvan stoppen we in een array. Zoals je wellicht ziet selecteer ik in de query ook het veld comment_author. Dit veld bevat de naam van de gene die de reactie gepost heeft. Momenteel maak ik geen gebruik van deze gegevens. Ik wel even met deze gedachte gespeeld. Vandaar dat ook deze gegevens worden geselecteerd.
Regel 20 t/m 39
Het resultaat van de query wordt regel voor regel geprint. Daar waar de titel groter is als 25 caracters wordt deze ingekort. Verder wordt op regel 31 t/m 33 een nette link gemaakt naar de post waarin de reactie staat. Verder gebruiken we hier en daar wat html tags om het geheel netjes te presenteren.
Als laatste, maar daarom niet minder belangrijk, voeren we op regel 43 de hele functie uit. Door deze code zoals hierboven beschreven in een php widget te stoppen, kan je zelf aangeven waar in je sidebar de data moet komen te staan.
Conclusie
Hoewel ik absoluut niet wil zeggen dat mijn php gekrabbel niet voor verbetering vatbaar is
, laat deze howto wel zien hoe verschrikkelijk flexibel Wordpress met de juiste plugins gebruikt kan worden. Uiteraard is dit voor de mensen die bekend zijn met de CMS software niets nieuws. Het gebruiken van de plugins om php code in widgets te stoppen geeft je (als je beschikt over de nodige Wordpress en php kennis) eindeloze mogelijkheden om je Wordpress site naar eigen inzicht verder aan te passen.
Gerelateerde links:
Download plugin Samsarin PHP Widget 2.0
Andere PHP widget plugins (lijst in de Wordpress plugin directory)
20 september 2009 om 11:01
Ik heb nog een paar zaken aangepast in de code.
Aan de link die gemaakt wordt heb ik de title tag toegevoegd. Deze zorgt ervoor dat wanneer je de muisaanwijzer op de link houd de volledige tekst in een verschijnt. Elders in de sidebar wordt dit principe ook gebruikt. Om de pluriformiteit te bewaren zoals dat zo mooi heet, heb ik dit bij deze 10 items ook doorgevoerd.
Verder heb ik ook de datum toegevoegd wanneer de reactie geplaatst is. Deze aanpassingen resulteren erin dat de code er nu alsvolgt uitziet:
< ?php function LastReactions() { global $wpdb; $fivesdrafts = $wpdb->get_results(" SELECT DATE_FORMAT(c.comment_date,'%d-%m ') as comment_date, p.post_title, p.guid FROM wp_comments c, wp_posts p WHERE p.id = c.comment_post_ID AND c.comment_approved =1 ORDER BY c.comment_date DESC LIMIT 10 "); echo ""; foreach ($fivesdrafts as $fivesdraft) { $DatumComment = $fivesdraft->comment_date; $NieuweText = $fivesdraft->post_title; $NieuweTextLang = $fivesdraft->post_title; if(strlen($NieuweText) > 25) { $NieuweText = rtrim(substr($NieuweText,0,20))."..."; // Kort de string in naar 20 karakters en voeg daar achter ... } echo "- ";
echo $DatumComment;
echo "guid;
echo "\" title=\"";
echo $NieuweTextLang;
echo "\">";
echo $NieuweText;
echo "";
echo "";
echo "
";
}
echo "
"; } ?> < ?php LastReactions(); ?>Edit: Ik zie dat de syntaxhighlighter niet werkt wanneer je deze in een reactie gebruikt. Min puntje voor de plugin die dat verzorgd. Binnenkort maar eens even kijken of daar iets op te vinden is.
20 september 2009 om 11:23
Er wordt veel gesleuteld voor een wordpress site.. is een php-based setting niet meer iets voor jou?
20 september 2009 om 11:31
@BBryte
Valt reuze mee hoor.
Af en toe vind je gewoon nét niet wat je zoekt in een plugin.
Zoals je ziet werkt de syntaxhighlighter nu wel in de comments. Onderstaande regel toevoegen aan het bestand syntaxhighlighter.php van de plugin bleek de oplossing. Dit met dank aan de reacties op de website van de maker van de plugin: