web-dev-qa-db-ja.com

メタキー値がすでに存在するかどうかを確認してください

メタキー "videoid"の投稿がいくつかあるとしましょう。そのメタキーの値は投稿ごとに異なります(そして異なる必要があります)。新しい投稿を追加するとき、その正確な値を持つvideoidが古い投稿にすでに存在するかどうかを確認する方法はありますか。私はWPの管理領域にカスタムメタボックスを追加するための参照としてこれを使いました: http://codex.wordpress.org/Function_Reference/add_meta_box

2
SomeoneS

カスタムフィールドパラメータ - meta_query を使用してWP_Queryでクエリを実行するだけで、メタキーと値を含む投稿を検索できます。

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

query_post()を使う必要はありません - WP_Queryとquery_posts()とget_posts()のどちらを使うべきですか? 。 IDだけでなく、投稿オブジェクトの完全な配列が必要な場合は、'fields' => 'ids'を削除します。

7
Nicolai

ialocinの答えは、変数として格納されているwp_queryがIDの配列を吐き出すだけであると誤って述べています。代わりにそれは全体のWP_Queryオブジェクトを与えます、それであなたはポストIDのその配列を得るために - > postsを使わなければなりません。

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

あるいはそれを関数でラップする:

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

それであなたはただあなたのメタ値をチェックすることができます:

$video_id = 1234;
if(meta_value_exists($video_id){
   // do something if exists
} else {
   // do something if not exists
}
1
cscheltinga

それを見つけた:

$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;
0
SomeoneS