web-dev-qa-db-fra.com

Exclure une catégorie de la liste déposée sous seulement sur certains modèles

ceci est une question de suivi à ce post exclure une catégorie à partir de la liste déposée

La solution donnée des œuvres pour moi. Cependant, je suis curieux de savoir comment je peux obtenir cela pour travailler conditionnellement? Spécifiquement, uniquement sur les archives de la catégorie? Par exemple. Il va toujours dire "déposé sous: A, B, X" sur des modèles de poste unique. Mais il dira "déposé sous: A, B" sur les archives.

Travailler dans la Genèse, si cela aide.

1
joycegrace

Vous pouvez ajouter des instructions conditionnelles avant d'appliquer la logique pour modifier les catégories. Par exemple, j'ai ajouté un chèque qui fera cautionner et renvoyer la liste non modifiée de catégories si nous ne sommes pas sur la catégorie des archives:

// Add the filter to 'the_category' tag.
add_filter( 'the_category', 'the_category_filter', 10, 2 );
function the_category_filter( $thelist, $separator = ' ' ) {

    // Bail if this is not the category archive page.
    // https://developer.wordpress.org/reference/functions/is_tax/
    if ( ! is_tax( 'category' ) ) {
        return $thelist;
    }

    // list the IDs of the categories to exclude
    $exclude = array(4,5);
    // create an empty array
    $exclude2 = array();

    // loop through the excluded IDs and get their actual names
    foreach($exclude as $c) {
             // store the names in the second array
             $exclude2[] = get_cat_name($c);
    }

    // get the list of categories for the current post
    $cats = explode($separator,$thelist);
    // create another empty array
    $newlist = array();

    foreach($cats as $cat) {
        // remove the tags from each category
        $catname = trim(strip_tags($cat));

        // check against the excluded categories
        if(!in_array($catname,$exclude2))

        // if not in that list, add to the new array
        $newlist[] = $cat;
    }

    // return the new, shortened list
    return implode( $separator, $newlist );
}
0
Dave Romsey