Verifique si el valor de la clave meta ya existe

2

Digamos que tengo pocas publicaciones con clave de metadatos "videoid". El valor de esa meta clave es diferente para cada publicación (y debe ser diferente). Al agregar una nueva publicación, ¿cómo puedo verificar si ya existe un videoid con ese valor exacto para algunas publicaciones anteriores? Usé esto como una referencia para agregar un meta box personalizado al área de administración de WP: enlace

    
pregunta SomeoneS 04.11.2013 - 13:10

4 respuestas

7

Simplemente haga una consulta con WP_Query usando el Parámetro de campos personalizados - meta_query para buscar publicaciones con clave meta y el valor - código ejemplar:

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

No es necesario utilizar query_post() - vea: ¿Cuándo debería usar WP_Query vs query_posts () vs get_posts ()? . Si necesita una matriz completa de objetos de publicación, no solo los identificadores, elimine 'fields' => 'ids' .

    
respondido por el Nicolai 04.11.2013 - 14:16
2

la respuesta de ialocin indica incorrectamente que el wp_query almacenado como una variable solo escupiría una matriz de ID. En su lugar, proporciona el objeto WP_Query completo, por lo que tiene que usar - > publicaciones para obtener esa matriz de ID de publicación.

// 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
 }
    
respondido por el jetlej 19.10.2014 - 03:55
1

O envuélvalo en una función:

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

Entonces, puedes verificar tu metavalor:

$video_id = 1234;
if(meta_value_exists($video_id){
   // do something if exists
} else {
   // do something if not exists
}
    
respondido por el cscheltinga 24.08.2016 - 19:09
0

Lo encontré:

$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;
    
respondido por el SomeoneS 04.11.2013 - 14:00

Lea otras preguntas en las etiquetas