Verificare se esiste già un valore di meta chiave

4 nov 2013, 14:10:05
Visualizzazioni: 18.1K
Voti: 2

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

2
Commenti

Quale plugin hai usato? Per favore [modifica] la tua domanda e aggiungi un link. Nota a margine: Le domande sono pensate per essere riferimenti anche per visitatori futuri. Per favore rivedi l'ortografia/punteggiatura/grammatica/maiuscole della tua domanda per renderla il più leggibile possibile. Grazie.

kaiser kaiser
4 nov 2013 14:39:28

Volevo dire che ho usato quel codice (in quel link), nel mio plugin personale. Non importa, ho cancellato quella parte.

SomeoneS SomeoneS
4 nov 2013 14:58:43
Tutte le risposte alla domanda 4
2

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'.

4 nov 2013 15:16:05
Commenti

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

jetlej jetlej
19 ott 2014 04:49:36

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

Nicolai Grossherr Nicolai Grossherr
19 ott 2014 13:17:30
0

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
 }
19 ott 2014 04:55:26
0

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
}
24 ago 2016 20:09:30
0

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;
4 nov 2013 15:00:27