Skip to content

trepmal.com

  • Home
  • Plugins
  • Github
  • Me on WP.org
  • Donate

Categories

  • WordPress Bits (149)
  • Uncategorized (11)
  • Scripts (5)
  • Tidbits (5)
  • Fun (3)

Tags

  • wordpress (30)
  • administration (16)
  • plugin (9)
  • free download (8)
  • functions.php (8)

Year

  • 2018 (8)
  • 2016 (2)
  • 2015 (4)
  • 2014 (19)
  • 2013 (11)

Function: add_meta_box

Related Categories for Pages

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 />';
    }
}
Posted on April 12, 2011March 1, 2012Categories DemosTags meta boxes, related categoriesLeave a comment on Related Categories for Pages
Proudly powered by WordPress