web-dev-qa-db-fra.com

Créez WP_Query pour rechercher des publications selon leurs catégories ou leurs catégories parent/enfant

Bonjour, je suis vraiment désolé si cela a déjà été demandé, mais je n’ai pas trouvé la solution exacte dont j’ai besoin. Alors voici le problème que je veux créer une recherche dans ma page Wordpress. À chaque fois qu'un utilisateur envoie le formulaire, je souhaite créer une requête pour rechercher des publications par catégories ou par catégories de parents/enfants. Voici un exemple:

Example

Donc, dans MYSQL, cela ressemblerait à quelque chose comme cela, mais je ne sais pas comment le faire dans Wordpress avec l’aide de WP_Query puisque je suis nouveau dans ce domaine.

SELECT * FROM posts 
WHERE posts.category 
LIKE '%John Doe%' OR posts.sub_category LIKE '%John Doe%'

Je n'ai pas compris comment les tables sont connectées, donc quelques opérations JOIN doivent être effectuées ici, mais j'espère que quelqu'un comprendra ce que je demande.

Toute aide serait appréciée. Merci d'avance!

1
Kanga

Utilisez d'abord get_categories pour obtenir toutes les catégories de publication à utiliser dans le formulaire, puis parcourez-les pour afficher une entrée multicheck ...

function hierarchical_category_inputs ($cat, $indent) {

    $cats = get_categories('hide_empty=false&orderby=name&order=ASC&parent='.$cat);
    $indent++;

    if ($cats) {
        foreach ($cats as $cat) {
           echo "<input type='checkbox' name='cat-".$cat->term_id."'";
           echo " style='margin-left: ".($indent*10)."px;'> ".$cat->name."<br>";
           hierarchical_category_inputs($cat->term_id, $indent);
        }
    }
}  

echo "<form method='post'>";
// 0 for all categories, -1 so first indent is 0
hierarchical_category_inputs(0,-1);
echo "<input type='hidden' name='custom_catsearch' value='yes'>";
echo "<input type='submit' value='Search'>";
echo "</form>";

Ensuite, dans la partie recherche, vous assembleriez le tableau des catégories cochées pour le transférer à WP_Query:

function custom_catsearch_output() {
    $cats = array();
    foreach ($_POST as $key => $value) {
        // make sure the post key starts with cat-
        if (substr($key,0,4) == 'cat-') {
            // check for check of the checkbox
            if ($value == '1') {
                // get the cat id from after cat-
                $cats[] = substr($key,4,strlen($key));
            }
        }
    }

    $query = new WP_Query(array('cat' => $cats));

    print_r($query);
    // ... do something different with the results ...

}
0
majick

Utilisez ceci:

$query = new WP_Query( array( 'cat' => 4 ) );

Où 4 est l'ID de la catégorie de niveau supérieur (Blackburn). Cette requête inclura les sous-chats.

Référence - WP_Query

1
Charles Jaimet