猿问

如何在页面上仅显示特定类别标签/名称并隐藏其他类别名称?

我试图仅显示 1 个类别名称,并希望在帖子列表页面中隐藏其他类别名称。


add_filter('get_the_terms', 'hide_categories_terms', 10, 3);

function hide_categories_terms($terms, $post_id, $taxonomy){

$excludeIDs = array(1,322,320,321);


// get all the terms 

$exclude = array();

foreach ($excludeIDs as $id) {

    $exclude[] = get_term_by('id', $id, 'category');

}


// filter the categories

if (!is_admin()) {

    foreach($terms as $key => $term){

        if($term->taxonomy == "category"){

            foreach ($exclude as $exKey => $exTerm) {

                if($term->term_id == $exTerm->term_id) unset($terms[$key]);

            }

        }

    }

}


return $terms;

它隐藏了所有类别名称,但不显示我想要显示的类别名称。请帮助我


人到中年有点甜
浏览 118回答 1
1回答

万千封印

您应该能够做到这一点,而无需获取排除项或双循环:add_filter('get_the_terms', 'hide_categories_terms', 10, 3);function hide_categories_terms($terms, $post_id, $taxonomy){        if ( ! is_admin() && is_single() ) {        // filter for terms that are not in the exclude array        $filtered_terms = array_filter($terms, function($term) {            $excludeIDs = array(1, 322, 320, 321);            return ! in_array($term->term_id, $excludeIDs);        });        // return filtered array of terms        return $filtered_terms;    }    // return default terms JIC the above case is not met    return $terms;}如果您运行的是 PHP 7.4+,您可以通过另一种方式编写此代码以节省一些行:add_filter('get_the_terms', 'hide_categories_terms', 10, 3);function hide_categories_terms($terms, $post_id, $taxonomy){        if ( ! is_admin() && is_single() ) {        $excludeIDs = [1, 322, 320, 321];        // filter for terms that are not in the exclude array        $filtered_terms = array_filter($terms, fn($t) => ! in_array($t->term_id, $excludeIDs));        // return filtered array of terms        return $filtered_terms;    }    // return default terms JIC the above case is not met    return $terms;}
随时随地看视频慕课网APP
我要回答