Wordpress get_the_category()正在返回我不想要的东西

时间:2017-09-13 09:02:02

标签: php wordpress categories

Word get_the_category()文件中的archive.php显示类别slug网址时返回两个类别的数组,一个不同,与“aktuality-blog'类别我使用slug。

以下是var_dump( get_the_category() );

array(2) {
  [0]=>
  object(WP_Term)#4190 (16) {
    ["term_id"]=>
    int(2)
    ["name"]=>
    string(9) "Aktuality"
    ["slug"]=>
    string(9) "aktuality"
    ["term_group"]=>
    int(0)
    ["term_taxonomy_id"]=>
    int(2)
    ["taxonomy"]=>
    string(8) "category"
    ["description"]=>
    string(0) ""
    ["parent"]=>
    int(0)
    ["count"]=>
    int(18)
    ["filter"]=>
    string(3) "raw"
    ["cat_ID"]=>
    int(2)
    ["category_count"]=>
    int(18)
    ["category_description"]=>
    string(0) ""
    ["cat_name"]=>
    string(9) "Aktuality"
    ["category_nicename"]=>
    string(9) "aktuality"
    ["category_parent"]=>
    int(0)
  }
  [1]=>
  object(WP_Term)#4188 (16) {
    ["term_id"]=>
    int(30)
    ["name"]=>
    string(4) "Blog"
    ["slug"]=>
    string(14) "aktuality-blog"
    ["term_group"]=>
    int(0)
    ["term_taxonomy_id"]=>
    int(30)
    ["taxonomy"]=>
    string(8) "category"
    ["description"]=>
    string(0) ""
    ["parent"]=>
    int(0)
    ["count"]=>
    int(1)
    ["filter"]=>
    string(3) "raw"
    ["cat_ID"]=>
    int(30)
    ["category_count"]=>
    int(1)
    ["category_description"]=>
    string(0) ""
    ["cat_name"]=>
    string(4) "Blog"
    ["category_nicename"]=>
    string(14) "aktuality-blog"
    ["category_parent"]=>
    int(0)
  }
}

我希望数组1只是数组0,而不是类别的实际情况。我可以通过插入数组[1] category int get_posts' s $ arg来解决。

我不想要解决方法,但是可靠的解决方案,如果它们是软件创建的,也可以在不同的类别上工作,只是正常存档,我可以使用类别slug,我可以简单地浏览本地分页等等在,我不会解决整个cms的问题。

1 个答案:

答案 0 :(得分:1)

因此,在Wordpress中,您可以将多个类别与给定帖子相关联。

所以你所经历的是一种正常行为,你只需为你想要的帖子选择一个类别就可以避免这种情况。

所以这里有一些你可以做的事情

从主要帖子查询中排除某个类别。

function exclude_category( $query ) {
    if ( $query->is_home() && $query->is_main_query() ) {
        $query->set( 'cat', '-1,-1347' );
    }
}
add_action( 'pre_get_posts', 'exclude_category' );
  

https://codex.wordpress.org/Plugin_API/Action_Reference/pre_get_posts

循环显示类别并为当前上下文选择重要的

foreach(get_the_category() as $term){
    if($term->slug == 'aktuality'){ 
        // do something
    }
}

也许这个?

安装Yoast插件以允许主要类别或使用独立于插件的分叉代码。

  

https://joshuawinn.com/using-yoasts-primary-category-in-wordpress-theme/

分叉代码(没有亲自测试)

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

}
?>