-
-
Save jawinn/1b44bf4e62e114dc341cd7d7cd8dce4c to your computer and use it in GitHub Desktop.
<?php | |
/** | |
* Get the Yoast primary category from its post meta value, and displays it, with HTML markup. | |
* If there is no primary category set, it displays the first assigned category. | |
* | |
* @param boolean $useCatLink Whether to link the category, if it exists | |
* @return void | |
*/ | |
function yourtheme_display_yoast_primary_category( $useCatLink = true ) { | |
// Retrieves post categories | |
$category = get_the_category(); | |
// If post has a category assigned. | |
if ( $category ) { | |
$category_display = ''; | |
$category_link = ''; | |
// Get post's 'Primary' category from post meta | |
$yoast_primary_key = get_post_meta( get_the_id(), '_yoast_wpseo_primary_category', TRUE ); | |
if ( !empty($yoast_primary_key) ) | |
{ | |
$term = get_term( $yoast_primary_key ); | |
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's 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="', esc_url($category_link), '">', esc_html_e($category_display), '</a>'; | |
echo '</span>'; | |
} else { | |
echo '<span class="post-category">', esc_html_e($category_display), '</span>'; | |
} | |
} | |
} | |
} | |
?> |
Just updated the script with a new an improved version for 2022, since this has been pretty popular and it needed a few adjustments. The primary meta key is now retrieved via the post meta value, which is a little more futureproof. It's now a function with a param for showing the link or not. And both the URL and category name are now escaped with the WP functions esc_url and esc_html_e (displays symbols like "&" properly as discussed in the comments here).
Thanks so much for this, getting me close to where I need to be. It's displaying the Primary Category (from the dropdown settings) correctly but not displaying the link...any ideas what could be this issue?
got it, I had to add $useCatLink = "true"; and worked great (thought only needed that to NOT display the link).
Thanks again, such a huge help!
You absolute legend. I was hoping someone would have the answer to that problem!