获得Wordpress单帖主要类别

时间:2017-08-15 12:54:35

标签: php wordpress

我想只显示一个帖子的主要类别,因为它有多个类别。目前使用此代码:

<?php
  $perma_cat = get_post_meta($post->ID , '_category_permalink', true);
  if ( $perma_cat != null ) {
    $cat_id = $perma_cat['category'];
    $category = get_category($cat_id);
  } else {
    $categories = get_the_category();
    $category = $categories[0];
  }
  $category_link = get_category_link($category);
  $category_name = $category->name;  
?>    

  <a href="<?php echo $category_link ?>"><?php echo $category_name ?></a> <span class="ion-ios-arrow-right"></span></li>

目前找不到太多关于此的文档。有人建议如何改进?

1 个答案:

答案 0 :(得分:2)

请注意,这只有在你使用Yoast实施&#34; primary&#34;类别 - 但我相信这就是你正在做的事情 - 所以这个代码块(由Jawinn在github上编写)应该可以工作:

<?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>';
    }
}

}
?>