carasmo
1/29/2017 - 11:56 PM

Get a Primary Category to display in the post_meta Genesis

Get a Primary Category to display in the post_meta Genesis

<?php
//don't add

/**
 *
 * Create Metabox and Primary Category Select Field
 * Requires CMB2 TRUNK branch NOT the plugin from the repo
 * Install CMB2-trunk.zip via plugin interface or incorporate in your theme, read their docs
 * https://github.com/WebDevStudios/CMB2/branches
 *
 */
function yourprefix_primary_category_selection() {

	$prefix = 'yourprefix_';
	 
	$cmb_demo = new_cmb2_box( array(
		'id'            => $prefix . 'metabox',
		'title'         => esc_html__( 'Primary Category', 'yourtextdomain' ),
		'object_types'  => array( 'post', ),
	    	'context'       => 'side',
		'priority'      => 'low',
		'show_names'    => false, 
	) );

	$cmb_demo->add_field( array(
		'name'           => esc_html__( 'Choose Primary Category', 'yourtextdomain' ),
		'desc'           => esc_html__( 'Choose primary category for display in post_meta', 'yourtextdomain' ),
		'id'             => $prefix . 'category_list',
		'taxonomy'       => 'category',
		'type'           => 'taxonomy_select',
	) );	

}
add_action( 'cmb2_admin_init', 'yourprefix_primary_category_selection' );


/**
 *
 * Add Primary to [post_categories] shortcode replacing the genesis shortcode of the same name
 *
 */
function yourprefix_post_primary_category_shortcode( $atts ) {

	//* get our CMB2 field and category stuff
	$prefix        = 'yourprefix_';
	$primary_cat   = get_post_meta( get_the_ID(), $prefix . 'category_list', true );
	$category_id   = get_cat_ID( $primary_cat );
	$category_link = get_category_link( $category_id );
	$category_name = get_cat_name( $category_id );

	$defaults = array(
		'sep'    => ', ',
		'before' => __( 'Filed Under: ', 'yourtextdomain' ),
		'after'  => '',
	);

	$atts = shortcode_atts( $defaults, $atts, 'post_categories' );

	//* fallback to the standard array if the choice in the primary metabox is not set
	if( empty( $primary_cat ) ) {
		$cats = get_the_category_list( trim( $atts['sep'] ) . ' ' );
	} else {
		$cats = '<a href="' . $category_link . '">' . $category_name . '</a>';
	}

	//* Do nothing if no cats
	if ( ! $cats ) {
		return '';
	}

	if ( genesis_html5() )
		$output = sprintf( '<span %s>', genesis_attr( 'entry-categories' ) ) . $atts['before'] . $cats . $atts['after'] . '</span>';
	else
		$output = '<span class="categories">' . $atts['before'] . $cats . $atts['after'] . '</span>';

	return apply_filters( 'genesis_post_categories_shortcode', $output, $atts );

}
add_shortcode( 'post_categories', 'yourprefix_post_primary_category_shortcode' );