web-dev-qa-db-fra.com

Obtenir des messages de catégories enfants avec l'ID de catégorie parent

J'ai un plugin qui montre les messages d'une catégorie choisie. Lorsque des catégories d'enfants sont choisies, cela fonctionne parfaitement. Cependant, lorsque je choisis une catégorie parente, elle n’affiche aucune publication des catégories enfants.

J'espère que c'est l'extrait qui doit être changé, mais je ne suis pas sûr.

Ce serait bien si quelqu'un pouvait m'aider.

<ul>

<?php 
   query_posts(array(
      'post_type' => 'post', 
      'category__in' => $text, 
      'orderby' => 'meta_value_num', 
      'meta_key' => 'rankk', 
      'order' => 'DESC', 
      'posts_per_page' => 100
   )); 
?>
3
nanonano

Comme je l'ai dit dans mes commentaires à votre question

Les plugins écrits de merde conduisent toujours à un désastre à un moment donné. À mon avis, supprimez ce plugin et écrivez votre propre code ou trouvez un plugin correctement écrit. Il ne sert à rien de changer le pneu endommagé alors que toute la voiture est complètement amortie :-)

Pour commencer, jamais utiliser query_posts

Remarque: Cette fonction n'est pas destinée à être utilisée par des plugins ou des thèmes. Comme expliqué plus tard, il existe de meilleures options plus performantes pour modifier la requête principale. query_posts () est une façon trop simpliste et problématique de modifier la requête principale d'une page en la remplaçant par une nouvelle instance de la requête. Il est inefficace (ré-exécute les requêtes SQL) et échouera carrément dans certaines circonstances (particulièrement lorsqu'il s'agit de pagination de publications).

Vous êtes vraiment mieux ici pour écrire votre propre code et supprimer le plugin. Vous pouvez également fusionner le plug-in actuel (uniquement le "bon" code) avec le code que je vous donnerai dans votre propre plug-in si nécessaire.

Vous ne devriez jamais apporter de modifications aux fichiers de plugin/thème dont vous n'êtes pas l'auteur. La principale raison est que, le jour de la mise à jour, vous perdrez la personnalisation all . Créez plutôt votre propre plugin ou apportez les modifications dans un thème enfant

Ce que vous voulez accomplir n’est pas réalisable avec les paramètres de catégorie actuels. Le mieux est d’utiliser un tax_query avec WP_Query . Avec un tax_query, par défaut, les termes enfants sont inclus dans le terme en cours de définition et c’est ce que vous recherchez.

Vous pouvez essayer ce qui suit (VEUILLEZ NOTER: cela nécessite PHP 5.4+)

$args = [
      'post_type' => 'post', 
      'orderby' => 'meta_value_num', 
      'meta_key' => 'rankk', 
      'order' => 'DESC', 
      'posts_per_page' => 100,
      'tax_query' => [
            [
                'taxonomy' => 'category',
                'field'    => 'term_id',
                'terms'    => 'YOUR PARENT CATEGORY ID',
            ],
        ],
];

$q = new WP_Query( $args );

if ( $q->have_posts() ) {
    while ( $q->have_posts() ) {
        $q->the_post();
        the_title();
    }
    wp_reset_postdata();
} 

Pour PHP versions antérieures à 5.4, essayez ceci.

$args = array(
      'post_type' => 'post', 
      'orderby' => 'meta_value_num', 
      'meta_key' => 'rankk', 
      'order' => 'DESC', 
      'posts_per_page' => 100,
      'tax_query' => array(
            array(
                'taxonomy' => 'category',
                'field'    => 'term_id',
                'terms'    => 'YOUR PARENT CATEGORY ID',
            ),
        ),
);

$q = new WP_Query( $args );

if ( $q->have_posts() ) {
    while ( $q->have_posts() ) {
        $q->the_post();
        the_title();
    }
    wp_reset_postdata();
} 
9
Pieter Goosen