Just whipped this up as a demo for someone, and thought it would make a great addition here as well.
The idea was to be able to link a category to a page. So if you have a page about Beavers, you can link it to your blog category called Beaver News.
This code is almost a plugin – it will work with some tweaking, but won’t do anything out-of-the-box.
It adds a category selection dropdown to the Edit Page screen, and saves the value as meta. (As-is, you aren’t allowed to not select a category, with a little hacking that should be fixable).
The code at the end includes a demo of how you might use this page meta on the frontend. This code, however, only outputs it in a meta box on the Edit Page screen.
add_action('add_meta_boxes', 'create_box' ); function create_box() { add_meta_box( 'related_category', 'Related Category', 'box_html', 'page', 'side'); } function box_html() { global $post; $selected = get_post_meta( $post->ID, '_related_category', true ); wp_nonce_field( plugin_basename(__FILE__), 'related_cat_nonce' ); wp_dropdown_categories( array('hide_empty' => false, 'show_count' => true, 'name' => 'related_cat', 'selected' => $selected ) ); } add_action('save_post', 'save_box' ); function save_box( $post_id ) { if ( !wp_verify_nonce( $_POST['related_cat_nonce'], plugin_basename(__FILE__) ) ) return $post_id; if ( defined('DOING_AUTOSAVE') && DOING_AUTOSAVE ) return $post_id; if ( 'page' == $_POST['post_type'] && !current_user_can( 'edit_page', $post_id ) ) return $post_id; if (!isset($_POST['related_cat'])) return $post_id; else { $related_cat = $_POST['related_cat']; update_post_meta( $post_id, '_related_category', $related_cat, get_post_meta( $post_id, '_related_category', true ) ); } } // this just puts the feed in a meta box on the appropriate page // it can be ripped out and added to the page template add_action('add_meta_boxes', 'create_box_display' ); function create_box_display() { add_meta_box( 'related_category_display', 'Related Category Display', 'box_html_display', 'page', 'side'); } function box_html_display() { global $post; $selected = get_post_meta( $post->ID, '_related_category', true ); $related = get_posts('numberposts=5&category='.$selected); foreach($related as $p) { echo '<h4>'.$p->post_title.'</h4>'; echo wpautop($p->post_content); echo '<hr />'; } }