web-dev-qa-db-fra.com

Comment afficher uniquement les articles de la dernière catégorie enfant

Par défaut, WordPress liste les publications de chaque catégorie dans sa hiérarchie.

Exemple:

Parent

/ - enfant

/ - petit-enfant

Lorsque vous visualisez la catégorie "Parent", vous verrez une liste de publications d'enfants, de petits-enfants et de parents - même si la publication est cochée dans "Petits-enfants".

Ma question est la suivante: comment afficher uniquement les messages lors de la visualisation du dernier enfant? Existe-t-il une fonction WordPress intégrée pour cela?

par exemple.:

[grandchild categories] = array of grandchildren

if(in_array( [grandchild categories] )) : show posts

else:

do nothing
2
Innate

Il existe bien sûr le paramètre include_children pour WP_Query dans le cadre du paramètres de taxonomie . Ce qui, je suppose, devrait fonctionner comme ça pour vous:

$args = array(
    'tax_query' => array(
        array(
            'include_children' => false
        ),
    ),
);
$query = new WP_Query( $args );

Ou via parse_tax_query pour votre archive de catégorie:

add_filter( 
    'parse_tax_query', 
    'wpse163572_do_not_include_children_in_category_archive_parse_tax_query' 
);
function wpse163572_do_not_include_children_in_category_archive_parse_tax_query( $query ) {
    if ( 
        ! is_admin() 
        && $query->is_main_query()
        && $query->is_category()
    ) {
        // as seen here: http://wordpress.stackexchange.com/a/140952/22534
        $query->tax_query->queries[0]['include_children'] = 0;
    }
}

Remarque: Merci à @PieterGoosen, ceci est maintenant testé et confirmé.

2
Nicolai

Ceux d'entre nous qui ont développé des sites Web statiques avec des pages comprendront le problème, comme Pieter l'a souligné dans les commentaires ci-dessus.

Essentiellement, si l'on peut créer une page et lister le contenu sur cette page, l'effet souhaité est obtenu, mais il est utile d'utiliser le système de catégories de wp pour gérer le contenu et le commander.

Voici ce que j'ai fait et que j'ai travaillé:

J'ai écrit une petite fonction autour de " get_term_children " - une fonction wordpress.

function category_has_children( $term_id ){ 
    $children = get_term_children( $term_id, "category" );
    if(is_array($children)){
      return $children;
    } else {
      return false;
    }
}

Ensuite, sur ma page de catégorie avant la boucle, je vérifie si le "category_has_children":

<?php if( category_has_children( $cat ) == false) : ?>

show posts as this is the last child category.

<? endif; ?>
1
Innate