是否隐藏某个类别名称而不将其删除?

时间:2015-03-14 作者:Rahman Sharif

我有一个类别叫做feature 我以前在主页上有一篇专题文章。问题是我不想要类别名称feature 出现在这篇文章中,但我想显示其他类别。

我怎么能那样做?

5 个回复
最合适的回答,由SO网友:Rahman Sharif 整理而成

为了实现这一点,我们需要使用get_the_category here.我将在多个地方使用此代码,因此创建函数更有效

function exclude_cats($excludedcats = array()){

    $categories = get_the_category();
    $separator = \', \';
    $output = \'\';
    foreach($categories as $category) {
        if ( !in_array($category->cat_ID, $excludedcats) ) {
            $output .= \'term_id ).\'" title="\' . esc_attr( sprintf( __( "View all posts in %s" ), $category->name ) ) . \'">\'.$category->cat_name.\'\'.$separator;
        }
    }
    echo trim($output, $separator);

}
我在函数中所做的就是调用get_the_category 函数,但我已排除了不想显示其名称的类别。

在索引中,我调用了如下函数exclude_cats(array(11, 40, 53));

SO网友:Stefan Wimmer

我认为@Lafif Astahdziq走在了正确的轨道上——我喜欢他的方法,尽管它是相当静态的。我是这样改写的:

add_filter(\'get_the_terms\', \'hide_categories_terms\', 10, 3);
function hide_categories_terms($terms, $post_id, $taxonomy){

    // define which category IDs you want to hide
    $excludeIDs = array(6);

    // 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;
}
把这个放在你的函数中。php,它会工作的。

SO网友:Lafif Astahdziq

使用如何get_the_terms 像这样过滤,,

add_filter(\'get_the_terms\', \'hide_categories_terms\', 10, 3);
function hide_categories_terms($terms, $post_id, $taxonomy){

    // get term to exclude by name, by id or maybe by slug
    $exclude = get_term_by(\'name\', \'feature\', \'category\', ARRAY_A);

    if (!is_admin()) {
        foreach($terms as $key => $term){
            if($term->taxonomy == "category"){
                if(in_array($key, $exclude)) unset($terms[$key]);
            }
        }
    }

    return $terms;
}
我觉得应该行得通,,

SO网友:Andy Gee

这是一个老问题,但仍然很流行,所以我添加了另一个解决方案来添加到主题的功能中。php文件。

function hide_feature($query){
    if($query->is_main_query() && $query->is_home()){
        //negate the ID of the \'feature\' category e.g. \'-6\'
        $query->set(\'cat\', \'-6\');   
    }
}
add_action( \'pre_get_posts\', \'hide_feature\' );

SO网友:Jörn Schellhaas

的简化版本answer by Stefan Wimmer:

add_filter(\'get_the_terms\', function ($terms, $post_id, $taxonomy) {
    // from https://wordpress.stackexchange.com/a/230921
    $exclude_categories = array(45);
    if (!is_admin()) {
        foreach($terms as $key => $term){
            if($term->taxonomy == "category" && in_array($term->term_id, $exclude_categories)) {
                unset($terms[$key]);
            }
        }
    }
    return $terms;
}, 100, 3);
我认为get_term_by 可以省略并使用in_array 而不是循环。

结束

相关推荐

Show all sub categories?

是否可以显示所有父猫的所有子/子类别?我有以下层次结构:父类别/税--子1--子2父类别/税2--子1--子2我想能够在一个模板上显示所有子类别,而不显示父类别。这可能吗?