Disons que j'ai quelques messages avec la méta-clé "videoid". La valeur de cette méta clé est différente pour chaque message (et doit être différente). Lors de l'ajout d'un nouveau message, comment puis-je vérifier si videoid avec cette valeur exacte existe déjà pour certains messages plus anciens? J'ai utilisé cela comme référence pour l'ajout d'une méta-boîte personnalisée à la zone d'administration de WP: http://codex.wordpress.org/Function_Reference/add_meta_box
Il suffit de faire une requête avec WP_Query
en utilisant le paramètre Champs personnalisés - meta_query pour rechercher des publications avec la clé méta et la valeur - code exemplaire:
// args to query for your key
$args = array(
'post_type' => 'your_post_type',
'meta_query' => array(
array(
'key' => 'videoid',
'value' => '111'
)
),
'fields' => 'ids'
);
// perform the query
$vid_query = new WP_Query( $args );
$vid_ids = $vid_query->posts;
// do something if the meta-key-value-pair exists in another post
if ( ! empty( $vid_ids ) ) {
// do your stuff
}
Il n'est pas nécessaire d'utiliser query_post()
- voir: Quand devriez-vous utiliser WP_Query vs query_posts () vs get_posts ()? . Si vous avez besoin d'un tableau complet d'objets de publication, et pas seulement des identifiants, supprimez 'fields' => 'ids'
.
la réponse d'ialocin indique à tort que la requête wp_query stockée en tant que variable ne ferait que cracher un tableau d'identifiants. Au lieu de cela, il donne l'intégralité de l'objet WP_Query. Vous devez donc utiliser -> posts pour obtenir ce tableau d'ID de post.
// args to query for your key
$args = array(
'post_type' => 'YOUR_POST_TYPE',
'meta_query' => array(
array(
'key' => 'YOUR_META_FIELD_NAME',
'value' => '111'
)
),
'fields' => 'ids'
);
// perform the query
$query = new WP_Query( $args );
$duplicates = $query->posts;
// do something if the key-value-pair exists in another post
if ( ! empty( $duplicates ) ) {
// do your stuff
}
Ou envelopper dans une fonction:
function meta_value_exists($your_meta_value) {
$args = array(
'post_type' => 'YOUR_POST_TYPE',
'post_status' => 'publish',
'numberposts' => 1,
'meta_key' => 'your_meta_field',
'meta_value' => $your_meta_value,
);
$current_post = get_posts($args);
if( $current_post ) {
return true;
} else {
return false;
}
}
Vous pouvez alors vérifier votre méta-valeur:
$video_id = 1234;
if(meta_value_exists($video_id){
// do something if exists
} else {
// do something if not exists
}
Trouvé le:
$args = array(
'meta_query' => array(
array(
'key' => 'videoid',
'value' => $_POST['videoid']
)
)
);
$videoQuery = new WP_Query( $args );
if ( $videoQuery->have_posts() ) :
while ( $videoQuery->have_posts() ) :
$videoQuery->the_post(); ?>
echo "<h3 class='post-title'>" . the_title() . "</h3>";
endwhile;
endif;