Verificar si un valor de meta clave ya existe

4 nov 2013, 14:10:05
Vistas: 18.1K
Votos: 2

Digamos que tengo varios posts con la meta clave "videoid". El valor de esa meta clave es diferente para cada post (y debe ser diferente). Al añadir un nuevo post, ¿cómo puedo verificar si ya existe un videoid con ese valor exacto en otros posts más antiguos? Usé esto como referencia para añadir un metabox personalizado al área de administración de WP: http://codex.wordpress.org/Function_Reference/add_meta_box

2
Comentarios

¿Qué plugin usaste? Por favor [edita] tu pregunta y añade un enlace. Nota al margen: Las preguntas están destinadas a ser referencias para visitantes posteriores. Por favor, revisa la ortografía/puntuación/gramática/capitalización de tu pregunta para que sea lo más fácil de leer posible. Gracias.

kaiser kaiser
4 nov 2013 14:39:28

Quería decir que usé ese código (en ese enlace), en mi propio plugin. No importa, eliminé esa parte.

SomeoneS SomeoneS
4 nov 2013 14:58:43
Todas las respuestas a la pregunta 4
2

Simplemente realiza una consulta con WP_Query utilizando los parámetros de Campos Personalizados (meta_query) para buscar posts con la clave meta y el valor - código de ejemplo:

 // argumentos para consultar tu clave
 $args = array(
   'post_type' => 'tu_tipo_de_post',
   'meta_query' => array(
       array(
           'key' => 'videoid',
           'value' => $new_posts_videoid  // por ejemplo: '111'
       )
   ),
   'fields' => 'ids'
 );
 // ejecuta la consulta
 $vid_query = new WP_Query( $args );

 $vid_ids = $vid_query->posts;

 // haz algo si el par clave-valor-meta existe en otro post
 if ( ! empty( $vid_ids ) ) {
     // realiza tus acciones
 }

No es necesario usar query_post() - ver: ¿Cuándo deberías usar WP_Query vs query_posts() vs get_posts()? . Si necesitas un array completo de objetos de post, no solo los IDs, elimina 'fields' => 'ids'.

4 nov 2013 15:16:05
Comentarios

$q_vid no devuelve solo una lista de IDs, es todo el objeto wp_query. Mira mi respuesta para la solución

jetlej jetlej
19 oct 2014 04:49:36

cierto, gracias, te agradecería si lo arreglas editando mi respuesta la próxima vez @JordanLejuwaan

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

La respuesta de ialocin indica incorrectamente que la consulta WP_Query almacenada en una variable solo devolvería un array de IDs. En realidad, devuelve todo el objeto WP_Query, por lo que hay que usar ->posts para obtener ese array de IDs de publicaciones.

// Argumentos para consultar tu campo personalizado
$args = array(
  'post_type' => 'TU_TIPO_DE_PUBLICACION',
  'meta_query' => array(
      array(
          'key' => 'NOMBRE_DE_TU_CAMPO_META',
          'value' => '111'
      )
  ),
  'fields' => 'ids'
);
// Ejecutar la consulta
$query = new WP_Query($args);
$duplicados = $query->posts;

// Hacer algo si el par clave-valor existe en otra publicación
if (!empty($duplicados)) {
    // Realiza tus acciones aquí
}
19 oct 2014 04:55:26
0

O envuélvelo 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 podrías verificar fácilmente tu valor meta:

$video_id = 1234;
if(meta_value_exists($video_id){
   // hacer algo si existe
} else {
   // hacer algo si no existe
}
24 ago 2016 20:09:30
0

Encontrado:

$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