2

Let's say that I have few posts with meta key "videoid". Value of that meta key is different for every post (and has to be different). When adding new post, how can I check if videoid with that exact value already exist for some older posts? I used this as a refference for adding custom meta box to admin area of WP: http://codex.wordpress.org/Function_Reference/add_meta_box

  • 1
    Which plugin did you use? Please edit your question and add a link. Sidenote: Questions are meant to be references for later visitors as well. Please rework your questions spelling/punctuation/grammar/capitalization so it as as easy to read as possible. Thanks. – kaiser Nov 4 '13 at 12:39
  • I wanted to say that I used that code (on that link), in my own plugin. Never mind, deleted that part. – SomeoneS Nov 4 '13 at 12:58
7

Just do a query with WP_Query using the Custom Fields Parameter - meta_query to look for posts with the meta key and the value - exemplary code:

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

There is no need to use query_post() - see: When should you use WP_Query vs query_posts() vs get_posts()? . If you need a complete array of post objects, not just the ids, remove 'fields' => 'ids'.

| improve this answer | |
  • $q_vid does not return just a list of ID's, it's the entire wp_query object. See my answer for fix – jetlej Oct 19 '14 at 1:49
  • true, thanks, I'd appreciate it if you fix it by editing my answer next time @JordanLejuwaan – Nicolai Oct 19 '14 at 10:17
2

ialocin's answer incorrectly states that the wp_query stored as a variable would just spit out an array of ID's. Instead it gives the whole WP_Query object, so you have to use ->posts to get that array of post ID's.

// 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
 }
| improve this answer | |
1

Or wrap it up in a function:

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

So then you could just check on your meta value:

$video_id = 1234;
if(meta_value_exists($video_id){
   // do something if exists
} else {
   // do something if not exists
}
| improve this answer | |
0

Found it:

$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;
| improve this answer | |

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.