You are currently browsing the Jon Kristian posts tagged: php


Using custom fields to sort posts

Recently I’ve been working with a client that wanted me to create a way to sort recipes into different types of food and under different types of dishes. This had me thinking about custom fields where you have meta_key and meta_value for each key. The client also wanted to use this in other scenarios so basically i started thinking it should be sorted on categories as well. The function takes one argument which is the category slug, it will then loop through meta_keys belonging to that category, secondly the meta_values and third each posts matching that specific value.

It’s a whole new take on the custom field principle, since you basically start with the meta_key and not the post itself. Probably not the prettiest code in the world, but it does the job:) And it uses definition lists which is ideal here, below the function there’s a css example aswell.

To use this code, put it in your theme’s functions.php and fetch it in your desired template with

function cfMenu($catID) {
global $wpdb, $post;
$catID = get_cat_id('Mat');

$queryKey = "SELECT DISTINCT meta_key FROM $wpdb->postmeta
	LEFT JOIN $wpdb->term_relationships AS tr ON $wpdb->postmeta.post_id = tr.object_id
	LEFT JOIN $wpdb->term_taxonomy AS tt ON tr.term_taxonomy_id = tt.term_taxonomy_id
	WHERE SUBSTRING(meta_key,1,1) != '_' AND tt.term_id = '$catID'";

	$cfKeys = $wpdb->get_results($queryKey, OBJECT);

	echo '<div id="cfMenu">';
	foreach ($cfKeys as $cfKey) {
		echo '<dl>';
		echo '<h3 class="cfKey">'.$cfKey->meta_key.'</h3>';

		$queryValue = "SELECT DISTINCT meta_value FROM $wpdb->postmeta WHERE meta_key = '$cfKey->meta_key'";
		$cfValues = $wpdb->get_results($queryValue, OBJECT);

		foreach ($cfValues as $cfValue) {
			echo '<dt class="cfValue">'.$cfValue->meta_value.'</dt>';

			$cfPosts = get_posts('meta_value='.$cfValue->meta_value);
			foreach ($cfPosts as $cfPost) {
				$permalink = get_permalink($cfPost->ID);
				echo '<dd class="cfTitle">&raquo; <a href='.$permalink.'>'.$cfPost->post_title.'</a></dd>';
			}
		}
		echo '</dl>';
	}
	echo '</div>';
}

Here’s a CSS example to get you started

#cfMenu {
	float: left;
	display: inline;
}

#cfMenu h3 {
	margin: 0 0 0 0;
	padding: 0 0 0 0;
}

#cfMenu dl {
	float: left;
	width: 230px;
	margin-right: 10px;
	margin-bottom: 20px;
}

#cfMenu dt {
	font-weight: bold;
	margin: 5px 0 0 0;
	padding: 0 0 0 10px;
}

#cfMenu dd {
	margin: 0 0 2px 0;
	padding: 0 0 0 10px;
	font-size: 90%;
}

A Smarter Menu for WordPress

With the release of wordpress 3.0 this function is no longer needed, I’d like to thank everyone showing interest in it:) I’ve always thought it would be nice to combine pages and categories all inside one menu, and recently I was looking for a nice way to add subtitles as well. So I thought it would be cool to write my own menu function to suit my own needs. Continue reading →


The Cloud


Jon Kristian is Stephen Fry proof thanks to caching by WP Super Cache