web-dev-qa-db-fra.com

Obtenir une liste de termes pour une catégorie spécifique

J'ai une catégorie appelée Nouvelles et une taxonomie personnalisée appelée Filtres qui est une taxonomie hiérarchique.

Lorsqu'un utilisateur crée une publication, il sélectionne une sous-catégorie dans Actualités et un sous-filtre dans la taxonomie de filtre.

J'essaie maintenant de répertorier toutes les "sous-catégories" et "filtres" lorsqu'un utilisateur accède à/news.

Lister les sous-catégories pour la catégorie 'Nouvelles' était facile. Mais je n'arrive pas à trouver un moyen de lister tous les "sous-filtres" pour la taxonomie "Filtres" limitée à la catégorie "Nouvelles".

Voici le code que j'ai utilisé pour obtenir une liste de sous-catégories pour les nouvelles de la catégorie:

function get_child_categories()
{
    if (is_category()) {
        $thiscat = get_category(get_query_var('cat'));
        $catid = $thiscat->cat_ID;
        $args = array('parent' => $catid);
        $categories = get_categories($args);

        return $categories;
    }

    return false;
}

J'espérais une fonction similaire qui listera tous les termes de taxonomie "Filtres", mais uniquement limitée à la catégorie "Actualités". Voici une capture d'écran de ce que j'essaie de réaliser:

Dans la capture d'écran ci-dessous, "/ news" est associé à la catégorie "News" dans la zone d'administration. Ainsi, si un utilisateur accède à/news, le serveur frontal doit répertorier tous les messages de la catégorie 'News'.

La page doit également répertorier toutes les sous-catégories dans la catégorie "Actualités". Cela se fait comme vous pouvez le voir dans la liste horizontale des sous-catégories.

Désormais, l'utilisateur peut également sélectionner un filtre, comme indiqué dans l'interface utilisateur d'administration. Ce que j'essaie de faire est de répertorier tous les filtres de tout article pouvant être classé dans la catégorie "Actualités" et à afficher dans la liste horizontale, où dans la section "Filtres". Cela sera ensuite utilisé pour filtrer les publications lorsque l'utilisateur clique, par exemple, sur "Nouvelles du monde" pour répertorier uniquement les publications pour lesquelles le filtre "Nouvelles du monde" est coché.

 enter image description here 

Catégorie/taxonomie actuelle dans l'espace administrateur lors de l'édition du message

 enter image description here 

1
Niraj Pandey

Le code suivant le fera. Veuillez remplacer le texte du filtre dans le code ci-dessous par le nom de taxonomie de filtre que vous avez défini.

if(is_category() ){

    $thiscat = get_queried_object_id(); 
    $filter_tax = array();
    $args = array( 'category' => $thiscat );
    $lastposts = get_posts( $args );

    foreach ( $lastposts as $post ){
        setup_postdata( $post );
        $terms = get_the_terms( $post->ID, 'filter' ); // Change the taxonomy name here

        if ( $terms && ! is_wp_error( $terms ) ){

         foreach ( $terms as $term ) {
            $filter_tax[] = $term;
         }

        }
    }
    wp_reset_postdata();

    if( !empty($filter_tax) ){
        print_r($filter_tax);
    } else {
        echo 'No filter set.';
    }

}
2
Vinod Dalvi

Je ne suis pas sûr d'avoir compris ce que vous demandez, mais j'espère que cela pourra vous aider à sortir.

Obtenir toutes les sous-catégories de la catégorie actuelle

$args = array('parent' => 17); // Or get queried object for ID
$categories = get_categories( $args );

Obtenir toutes les sous-catégories de tous les niveaux

$args = array('child_of' => 17); // Or get queried object for ID
$categories = get_categories( $args );

Obtenir toutes les catégories dans la taxonomie personnalisée

$terms = get_terms(array(
    'taxonomy' => 'post_tag',
    'hide_empty' => false,
));
1
Neit