.
* Each element has a class of "related", so they can be styled.
*/
function dlc_related ($count = 5, $field = 'keywords') {
global $post, $wpdb;
$keywords = get_post_custom_values('keywords');
// No keywords? Nothing is relevant.
if (count($keywords) == 0)
return;
// Get all possible keyword combinations, and sort them by
// number of keywords. This functions as relevancy, i.e.,
// the more keywords they have in common the more relevant
// the post is.
$sets = power_set($keywords);
uksort($sets, '_size_sort');
$sql = "SELECT x.post_title AS title, p.post_id FROM ";
$tables = array("{$wpdb->posts} x", "{$wpdb->postmeta} p");
$where = "
WHERE x.ID = p.post_ID
AND x.post_date <= NOW()
AND x.post_status = 'publish'
AND p.post_id != '$post->ID'
AND p.meta_key = '{$field}'";
$did_header = 0;
$seen = array();
foreach ($sets as $set) {
$nkw = count($set);
$ltables = $tables;
$lwhere = $where;
$all_kws = join(', ', $set);
// power_sets() returns an empty set
if (count($set) == 0) {
if ($did_header)
echo "
\n";
return;
}
for ($i = 0; $i <= $nkw; $i++) {
if ($set[$i]) {
array_push($ltables, "{$wpdb->postmeta} p{$i}");
$lwhere .= "
AND p.post_id = p{$i}.post_id
AND p.meta_key = p{$i}.meta_key
AND p{$i}.meta_value = '{$set[$i]}'";
}
}
$lsql = $sql . join(', ', $ltables) . $lwhere . "
GROUP BY p.post_ID
ORDER BY x.post_date DESC
LIMIT $count";
$results = $wpdb->get_results($lsql);
$good_results = 0;
if (count($results)) {
if (! $did_header) {
echo "
Related Posts
\n";
echo "
\n";
$did_header = 1;
}
foreach ($results as $result) {
if ($good_results == $count) {
if ($did_header)
echo "
The content on this page is restricted to Digidesignresort Safari Lounge Members. Please login (to the right) for access to the training and bonus materials if you are already a member.
Not a Safari Lounge Designer class member yet?
The Safari-Lounge is a paid Membership Site to learn designing your own digital scrapbooking kits.