web-dev-qa-db-fra.com

mysql personnalisé wp_query

ce code est conçu pour sélectionner les publications avec la méta-valeur sélectionnée dans la requête wordpress

<?php $values = $wpdb->get_results("SELECT DISTINCT meta_value FROM $wpdb->postmeta WHERE meta_key  = 'wpcf-scr'",ARRAY_A);?>
<select name="wpcf-scr">
<option value="">default</option>
<?php foreach ($values as $value):?>
<?php if($value['meta_value']):?>
    <option value="<?php echo $value['meta_value']?>"><?php echo $value['meta_value']?></option>
<?php endif;?>
<?php endforeach;?>
</select>

Je dois réutiliser le code, mais en sélectionnant les publications avec des balises (assignées manuellement) et non des méta-valeurs ...

quelque chose comme ceci ci-dessous juste pour l'explication (c'est faux)

<?php $values = $wpdb->get_results("SELECT DISTINCT post_tags FROM $wpdb->tags ",ARRAY_A);?>
<select name="tags">
<option value="">default</option>
<option value="tag1">tag1</option>
<option value="tag1">tag2</option>
<option value="tag1">tag3</option>
<option value="tag1">tag4</option>
</select>

Comment faire le deuxième exemple correctement?

merci

3
johnmido

Vous pouvez utiliser la fonction wp_dropdown_categories() et transmettre post_tag en tant que paramètre taxonomy.

<?php wp_dropdown_categories( array( 'taxonomy' => 'post_tag' ) ); ?>
1
RRikesh

Cela ne fonctionnera jamais, car il n'y a pas de table tags dans une base de données par défaut WP (ni une colonne post_tags pour cette question). Pour que cette requête fonctionne, vous devez examiner et joindre les tables term_relationships, term_taxonomy et terms. Des choses compliquées.

Si vous n'êtes pas familier avec les requêtes MySQL ou la structure de la base de données WP, utilisez plutôt la fonction get_tags . Vous n'avez même pas besoin de fournir d'arguments: cela retournera toutes les balises de publication existantes sous forme de tableau d'objets. Voici un exemple, basé sur le code de votre question:

<?php
$values = get_tags();
if(sizeof($values) > 0) : ?>
    <select name="tags">
        <option value="">default</option>
    <?php
        // I've used value=id instead of name / slug, which is always better, but just change the index if desired
        foreach ($values as $value) : ?>
        <option value="<?php echo($value->term_id); ?>"><?php echo($value->name); ?></option>
    <?php endforeach; ?>
    </select>
<?php endif; ?>

Bonne chance!

1
Tomas Buteler