Get the primary term for the current post if using Yoast SEO. If not, fallback to first selected category.
<?php
$currentID = get_the_ID();
$category = get_the_category();
// Get primary (Yoast) term if it is set
$category_display = '';
$category_slug = '';
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_slug = $category[0]->slug;
} else {
// Set variables for category_display & category_slug based on Primary Yoast Term
$category_id = $term->term_id;
$category_term = get_category($category_id);
$category_display = $term->name;
$category_slug = $term->slug;
}
} else {
// Default, display the first category in WP's list of assigned categories
$category_display = $category[0]->name;
$category_slug = $category[0]->slug;
}
Use this modified version if you’d like to force the primary category to be a top-level category. So if the primary category is a sub category, this will set the parent of that sub category as the term.
<?php
$currentID = get_the_ID();
$category = get_the_category();
// Get primary (Yoast) term if it is set
$category_display = '';
$category_slug = '';
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_slug = $category[0]->slug;
} else {
// Check if category has parent
$category_id = $term->term_id;
$category_term = get_category($category_id);
// if primary category is a child
if( $category_term->category_parent > 0 ) {
// Get parent category object
$parent = $category_term->parent;
$parent_object = get_category($parent);
// Set parent category variables
$category_display = $parent_object->name;
$category_slug = $parent_object->slug;
// if primary cateogry is a parent
} else {
// Yoast Primary category
$category_display = $term->name;
$category_slug = $term->slug;
}
}
} else {
// Default, display the first category in WP's list of assigned categories
$category_display = $category[0]->name;
$category_slug = $category[0]->slug;
}