web-dev-qa-db-fra.com

Écho de toutes les clés méta d'un TYP personnalisé

Existe-t-il un moyen de vider une liste de toutes les clés méta utilisées par toutes les publications appartenant à un type de publication personnalisé?

À savoir, un aliment nommé après le type, chaque aliment (jambon, spaghetti, poulet) peut avoir une méta clé différente, générée de manière dynamique. Je ne peux pas savoir quelles méta-clés ont été ajoutées, mais j'aimerais pouvoir utiliser la liste de toutes.

3
marctain

Vous pouvez utiliser une requête simple pour obtenir une liste distincte de méta_keys saisies par l'utilisateur pour un type de publication spécifique, puis mettre en cache les résultats à l'aide de l'API Transients. Les clés méta de cette requête seront celles qui ne commencent pas par un trait de soulignement ou un nombre.

function generate_foods_meta_keys(){
    global $wpdb;
    $post_type = 'foods';
    $query = "
        SELECT DISTINCT($wpdb->postmeta.meta_key) 
        FROM $wpdb->posts 
        LEFT JOIN $wpdb->postmeta 
        ON $wpdb->posts.ID = $wpdb->postmeta.post_id 
        WHERE $wpdb->posts.post_type = '%s' 
        AND $wpdb->postmeta.meta_key != '' 
        AND $wpdb->postmeta.meta_key NOT RegExp '(^[_0-9].+$)' 
        AND $wpdb->postmeta.meta_key NOT RegExp '(^[0-9]+$)'
    ";
    $meta_keys = $wpdb->get_col($wpdb->prepare($query, $post_type));
    set_transient('foods_meta_keys', $meta_keys, 60*60*24); # create 1 Day Expiration
    return $meta_keys;
}

Pour obtenir une liste de meta_keys dans votre modèle afin de générer votre liste déroulante, utilisez la fonction suivante:

function get_foods_meta_keys(){
    $cache = get_transient('foods_meta_keys');
    $meta_keys = $cache ? $cache : generate_foods_meta_keys();
    return $meta_keys;
}

$meta_keys = get_foods_meta_keys();
8
Brian Fegter

Je crois que vous devriez d'abord faire une requête pour rassembler toutes les clés méta pour tout le type de publication personnalisé dans un tableau. Donc, quelque chose comme ça:

$args = array(
    'post_type' => 'custom-post-type-name',
    );
$cpts = new WP_Query($args);
if($cpts->have_posts()) : while($cpts->have_posts() ) : $cpts->the_post();
    $meta_values[] = get_post_meta($post->ID);
endwhile; endif;

Toutes vos méta-valeurs seront stockées dans un tableau $meta_values.

Vous pouvez faire un var_dump($meta_values) pour regarder le contenu du tableau pour en être sûr.

1
Aaron Holbrook

Utilisez get_post_custom pour obtenir toutes les clés et toutes les valeurs.

Il existe également une fonction appelée get_post_custom_keys() que vous pouvez utiliser pour récupérer toutes les clés méta.

0
KeepMove