Verificare se esiste già un valore di meta chiave
Supponiamo che io abbia alcuni post con la meta key "videoid". Il valore di questa meta key è diverso per ogni post (e deve essere diverso). Quando aggiungo un nuovo post, come posso verificare se esiste già un videoid con quel valore esatto in qualche post più vecchio? Ho usato questo come riferimento per aggiungere una custom meta box all'area admin di WP: http://codex.wordpress.org/Function_Reference/add_meta_box
Esegui semplicemente una query con WP_Query
utilizzando i parametri dei Custom Field (meta_query
) per cercare post con la meta chiave e il valore - codice di esempio:
// argomenti per la query della tua chiave
$args = array(
'post_type' => 'your_post_type',
'meta_query' => array(
array(
'key' => 'videoid',
'value' => $new_posts_videoid // per esempio: '111'
)
),
'fields' => 'ids'
);
// esegui la query
$vid_query = new WP_Query( $args );
$vid_ids = $vid_query->posts;
// fai qualcosa se la coppia meta-chiave-valore esiste in un altro post
if ( ! empty( $vid_ids ) ) {
// fai le tue operazioni
}
Non c'è bisogno di usare query_post()
- vedi:
Quando dovresti usare WP_Query vs query_posts() vs get_posts()?
. Se hai bisogno di un array completo di oggetti post, non solo degli ID, rimuovi 'fields' => 'ids'
.

$q_vid non restituisce solo una lista di ID, ma l'intero oggetto wp_query. Vedi la mia risposta per la soluzione

vero, grazie, apprezzerei se la correggessi modificando la mia risposta la prossima volta @JordanLejuwaan

La risposta di ialocin afferma erroneamente che la wp_query memorizzata come variabile restituirebbe solo un array di ID. In realtà fornisce l'intero oggetto WP_Query, quindi è necessario utilizzare ->posts per ottenere quell'array di ID dei post.
// argomenti per la query della tua chiave
$args = array(
'post_type' => 'YOUR_POST_TYPE',
'meta_query' => array(
array(
'key' => 'YOUR_META_FIELD_NAME',
'value' => '111'
)
),
'fields' => 'ids'
);
// esegui la query
$query = new WP_Query( $args );
$duplicates = $query->posts;
// fai qualcosa se la coppia chiave-valore esiste in un altro post
if ( ! empty( $duplicates ) ) {
// fai le tue operazioni
}

Oppure racchiudilo in una funzione:
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;
}
}
Quindi potresti semplicemente verificare il tuo meta valore:
$video_id = 1234;
if(meta_value_exists($video_id){
// fai qualcosa se esiste
} else {
// fai qualcosa se non esiste
}

Trovato:
$args = array(
'meta_query' => array(
array(
'key' => 'videoid', // Chiave meta da cercare
'value' => $_POST['videoid'] // Valore da cercare nel campo meta
)
)
);
// Esegue la query personalizzata
$videoQuery = new WP_Query( $args );
// Se ci sono post che corrispondono alla query
if ( $videoQuery->have_posts() ) :
while ( $videoQuery->have_posts() ) :
$videoQuery->the_post(); ?>
echo "<h3 class='post-title'>" . the_title() . "</h3>"; // Mostra il titolo del post
endwhile;
endif;
