Skip to content

Instantly share code, notes, and snippets.

@JamieWritesCode
Forked from jawinn/primary_category.php
Created May 24, 2016 01:15
Show Gist options
  • Save JamieWritesCode/33fdbe2f21ff144b30ad49d78a5bba8a to your computer and use it in GitHub Desktop.
Save JamieWritesCode/33fdbe2f21ff144b30ad49d78a5bba8a to your computer and use it in GitHub Desktop.
Display Primary Category (Yoast's WordPress SEO)
<?php
// SHOW YOAST PRIMARY CATEGORY, OR FIRST CATEGORY
$category = get_the_category();
$useCatLink = true;
// If post has a category assigned.
if ($category){
$category_display = '';
$category_link = '';
if ( class_exists('WPSEO_Primary_Term') )
{
// Show the post's 'Primary' category, if this Yoast feature is available, & one is set
$wpseo_primary_term = new WPSEO_Primary_Term( 'category', get_the_id() );
$wpseo_primary_term = $wpseo_primary_term->get_primary_term();
$term = get_term( $wpseo_primary_term );
if (is_wp_error($term)) {
// Default to first category (not Yoast) if an error is returned
$category_display = $category[0]->name;
$category_link = get_category_link( $category[0]->term_id );
} else {
// Yoast Primary category
$category_display = $term->name;
$category_link = get_category_link( $term->term_id );
}
}
else {
// Default, display the first category in WP's list of assigned categories
$category_display = $category[0]->name;
$category_link = get_category_link( $category[0]->term_id );
}
// Display category
if ( !empty($category_display) ){
if ( $useCatLink == true && !empty($category_link) ){
echo '<span class="post-category">';
echo '<a href="'.$category_link.'">'.htmlspecialchars($category_display).'</a>';
echo '</span>';
} else {
echo '<span class="post-category">'.htmlspecialchars($category_display).'</span>';
}
}
}
?>
@mdahlke
Copy link

mdahlke commented Nov 28, 2017

Here's that, but in a function (without the display stuff, but that could easily be added back in):

<?php
/**
 * Get the primary category for a post
 *
 * @param bool $id
 * @param null $category
 * 
 * @return array
 */
function getPrimaryCategory($id = false, $category = null) {

	if(!$id){
		$id = get_the_ID();
	}

	if(!$category){
		$category = $category = get_the_category($id);
	}

	if (class_exists('WPSEO_Primary_Term')) {
		// Show the post's 'Primary' category, if this Yoast feature is available, & one is set
		$wpseo_primary_term = new WPSEO_Primary_Term('category', $id);
		$wpseo_primary_term = $wpseo_primary_term->get_primary_term();
		$term = get_term($wpseo_primary_term);
		if (is_wp_error($term)) {
			// Default to first category (not Yoast) if an error is returned
			$category_display = $category[0]->name;
			$category_link = get_category_link($category[0]->term_id);
		}
		else {
			// Yoast Primary category
			$category_display = $term->name;
			$category_link = get_category_link($term->term_id);
		}
	}
	else {
		// Default, display the first category in WP's list of assigned categories
		$category_display = $category[0]->name;
		$category_link = get_category_link($category[0]->term_id);
	}

	return [
		'link' => $category_link,
		'name' => $category_display,
	];

}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment