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.
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();
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.
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.