Verifică dacă o valoare de meta key există deja

4 nov. 2013, 14:10:05
Vizualizări: 18.1K
Voturi: 2

Să presupunem că am câteva articole cu meta key "videoid". Valoarea acestei meta key este diferită pentru fiecare articol (și trebuie să fie diferită). Când adaug un articol nou, cum pot verifica dacă un videoid cu aceeași valoare există deja pentru alte articole mai vechi? Am folosit acest lucru ca referință pentru adăugarea unui meta box personalizat în zona de administrare WP: http://codex.wordpress.org/Function_Reference/add_meta_box

2
Comentarii

Ce plugin ai folosit? Te rog [editează] întrebarea ta și adaugă un link. Observație: Întrebările sunt menite să servească drept referințe și pentru vizitatorii viitori. Te rog să revizuiți ortografia/punctuația/gramatica/majusculele din întrebarea ta astfel încât să fie cât mai ușor de citit. Mulțumesc.

kaiser kaiser
4 nov. 2013 14:39:28

Voiam să spun că am folosit acel cod (de pe linkul respectiv), în propriul meu plugin. Nu mai contează, am șters acea parte.

SomeoneS SomeoneS
4 nov. 2013 14:58:43
Toate răspunsurile la întrebare 4
2

Pur și simplu efectuează o interogare cu WP_Query folosind parametrii Custom Field (meta_query) pentru a căuta postări cu cheia meta și valoarea - exemplu de cod:

 // argumente pentru interogarea cheii tale
 $args = array(
   'post_type' => 'your_post_type',
   'meta_query' => array(
       array(
           'key' => 'videoid',
           'value' => $new_posts_videoid  // de exemplu: '111'
       )
   ),
   'fields' => 'ids'
 );
 // execută interogarea
 $vid_query = new WP_Query( $args );

 $vid_ids = $vid_query->posts;

 // fă ceva dacă perechea meta-key-value există în altă postare
 if ( ! empty( $vid_ids ) ) {
     // fă ce ai de făcut
 }

Nu este nevoie să folosești query_post() - vezi: Când ar trebui să folosești WP_Query vs query_posts() vs get_posts()? . Dacă ai nevoie de un array complet de obiecte post, nu doar ID-uri, elimină 'fields' => 'ids'.

4 nov. 2013 15:16:05
Comentarii

$q_vid nu returnează doar o listă de ID-uri, ci întregul obiect wp_query. Vezi răspunsul meu pentru soluție

jetlej jetlej
19 oct. 2014 04:49:36

corect, mulțumesc, aș aprecia dacă ai corecta prin editarea răspunsului meu data viitoare @JordanLejuwaan

Nicolai Grossherr Nicolai Grossherr
19 oct. 2014 13:17:30
0

Răspunsul lui ialocin afirmă greșit că wp_query stocat ca variabilă ar returna doar un array de ID-uri. În schimb, returnează întregul obiect WP_Query, așa că trebuie să folosești ->posts pentru a obține acel array cu ID-urile postărilor.

// argumente pentru interogarea cheii tale
 $args = array(
   'post_type' => 'TIPUL_TAU_DE_POSTARE',
   'meta_query' => array(
       array(
           'key' => 'NUMELE_CÂMPULUI_META',
           'value' => '111'
       )
   ),
   'fields' => 'ids'
 );
 // execută interogarea
 $query = new WP_Query( $args );
 $duplicate = $query->posts;

 // fă ceva dacă perechea cheie-valoare există într-o altă postare
 if ( ! empty( $duplicate ) ) {
     // fă ce trebuie
 }
19 oct. 2014 04:55:26
0

Sau poți înfășura logica într-o funcție:

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;
    }
}

Apoi poți verifica simplu valoarea meta:

$video_id = 1234;
if(meta_value_exists($video_id){
   // fă ceva dacă există
} else {
   // fă ceva dacă nu există
}
24 aug. 2016 20:09:30
0

Am găsit:

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