web-dev-qa-db-fra.com

Comment afficher des articles via des termes de taxonomie personnalisés à l'aide de cases à cocher?

J'aimerais avoir un formulaire avec des cases à cocher. Chaque case à cocher serait un terme de ma taxonomie "villes". L'idée est que si un utilisateur sélectionne l'une des cases à cocher, il doit afficher tous les articles qui sont ET NON en termes marqués.

Si j'avais ce code:

$args['tax_query'] = array(
    array(
        'taxonomy' => 'cities',
        'terms' => array('Boston', 'Chicago'),
        'field' => 'slug',
        'operator' => 'NOT IN',
    ),
);
query_posts($args);

Comment puis-je transmettre au tableau des termes la valeur des cases à cocher? Je veux dire, changer:

'terms' => array('Boston', 'Chicago'),

à:

'terms' => array(VALUE CHECKBOX 1, VALUE CHECKBOX 2),

Merci.

1
Mike

Vous pouvez exécuter une requête avec un paramètre tax_query qui exclut certains termes de taxonomie. Voir cette réponse .

En ce qui concerne exécuter la requête, vous pouvez avoir un formulaire qui envoie à la page sur laquelle elle se trouve (vous devrez localiser le fichier de modèle approprié appelé pour cette page ou créer un fichier. personnalisé), puis, une fois la page actualisée, traitez vos entrées de formulaire, exécutez votre requête et affichez les résultats.

Vous pouvez également exécuter votre requête côté serveur et l'appeler via AJAX. Pour plus d'informations sur ce sujet, vous pouvez commencer ici (il parle de plugins mais vous n'avez pas vraiment besoin de créer un plugin, vous pouvez toujours mettre votre PHP code dans functions.php dans le répertoire du thème) ou recherchez simplement des tutoriels sur la mise en oeuvre de AJAX dans WordPress.

EDIT: Selon votre commentaire, voici du code pour obtenir de la valeur à partir de la case à cocher de la page. Il n'a pas été testé, ne sert que de guide. Notez que le formulaire se soumet à lui-même. Nous y parvenons en plaçant l'URL de la page dans le paramètre action du formulaire.

<?php
$cb_city = '';
if(isset($_POST['city']) && $_POST['city'] != '') { // if form was submitted we can get value
    $cb_city = $_POST['city'];
}
?>
<form action="<?php echo get_permalink(); ?>" method="POST">
    <label>Your label
        <?php
            $checked = "";
            if( !empty($cb_city) ){ // pre-populate checkboxif it was checked on form submit
                $checked = "checked";
            }
        ?>
        <input <?= $checked; ?> type="checkbox" name="city" id="city" value="1"/>
    </label>
    <button type="submit" class="btn-submit">Submit</button>
</form>
0
montrealist