-
-
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>'; | |
| } | |
| } | |
| } | |
| } | |
| ?> |
Thanks for this, with the help of this i was able to create a shortcode which can display the Primary Category used by Yoast wherever you want
https://gist.github.com/geekysihag/97938e6e8e318d0ab59b437f44b8b6f1
Tks mate!! :)
thanks a lot for that, I've just changed the
htmlspecialchars to htmlspecialchars_decode as it was not treating a "&" properly!
thanks a lot for that, I've just changed the
htmlspecialcharstohtmlspecialchars_decodeas it was not treating a "&" properly!
You absolute legend. I was hoping someone would have the answer to that problem!
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!
Life saver.