it-swarm.com.de

Überprüfen Sie, ob der Metaschlüsselwert bereits vorhanden ist

Nehmen wir an, ich habe einige Posts mit dem Metaschlüssel "videoid". Der Wert dieses Metaschlüssels ist für jeden Beitrag unterschiedlich (und muss unterschiedlich sein). Wie kann ich beim Hinzufügen eines neuen Beitrags überprüfen, ob für einige ältere Beiträge bereits eine Video-ID mit genau diesem Wert vorhanden ist? Ich habe dies als Referenz für das Hinzufügen einer benutzerdefinierten Meta-Box zum Administratorbereich von WP verwendet: http://codex.wordpress.org/Function_Reference/add_meta_box

2
SomeoneS

Führen Sie einfach eine Abfrage mit WP_Query durch, indem Sie den Parameter Benutzerdefinierte Felder - meta_query verwenden, um nach Beiträgen mit dem Metaschlüssel und dem Wert zu suchen - Beispielcode:

 // 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() muss nicht verwendet werden - siehe: Wann sollten Sie WP_Query vs query_posts () vs get_posts () verwenden? . Wenn Sie ein vollständiges Array von Post-Objekten benötigen, nicht nur die IDs, entfernen Sie 'fields' => 'ids'.

7
Nicolai

die Antwort von ialocin besagt fälschlicherweise, dass die als Variable gespeicherte wp_query nur ein Array von IDs ausspuckt. Stattdessen wird das gesamte WP_Query-Objekt angegeben, sodass Sie -> posts verwenden müssen, um dieses Array von Post-IDs abzurufen.

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

Oder wickeln Sie es in eine Funktion:

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

Dann können Sie einfach Ihren Meta-Wert überprüfen:

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

Fand es:

$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