Valor meta de la consulta de WP

3

Estoy intentando obtener publicaciones que hayan aplicado el valor meta trainees .

$args = array(
    'posts_per_page'   => -1,
    'orderby'          => 'post_date',
    'order'            => 'DESC',
    'post_status'      => 'publish',
    'meta_query' => array(
        array(
            'key'     => 'enterprise_on_page',
            'value'   => array( 'trainees' ),
            'compare' => 'IN',
        ),
    ),
);

$enterprise_posts = get_posts( $args );


En mi meta-campo con la clave enterprise_on_page , he almacenado un array () anteriormente como update_post_meta( $post_id, 'enterprise_on_page', array('trainees', 'staff') ); .

Si llamo a var_dump(get_post_meta($post->ID)) obtengo el siguiente resultado:

'enterprise_on_page' => 
    array (size=1)
      0 => string 'a:2:{i:0;s:8:"trainees";i:1;s:7:"staff";}' 


¿Cómo puedo modificar mi consulta para que solo se muestren las publicaciones con meta-valor trainees ? Por ahora no recibo ninguna publicación.

    
pregunta pbaldauf 18.11.2014 - 15:58

3 respuestas

5

Gracias a @Howdy_McGee. Me dio la sugerencia de cuidar consultas meta en serie . Con este código obtengo el resultado deseado.

$args = array(
    'posts_per_page'   => -1,
    'orderby'          => 'post_date',
    'order'            => 'DESC',
    'post_status'      => 'publish',
    'meta_query' => array(
        array(
            'key'     => 'enterprise_on_page',
            'value'   => serialize(strval('trainees')),
            'compare' => 'LIKE',
        ),
    ),
);

$enterprise_posts = get_posts( $args );
    
respondido por el pbaldauf 18.11.2014 - 16:24
2

Como sus datos están estructurados actualmente, no puede usar SQL para hacerlo (bueno, al menos no de manera significativa). Tienes dos opciones:

  1. Obtenga TODOS los mensajes y recórtelos en la memoria buscando el meta correcto del mensaje, o
  2. Almacene los valores meta por separado.

Entre los dos, os aconsejo este último. WordPress le permite almacenar varias filas del mismo meta de publicación para una sola publicación, por lo que puede obtener una matriz de datos sin necesidad de serializarlos y almacenarlos en una clave. Para hacer esto, debes cambiar ligeramente la forma en que interactúas con la meta meta de publicación aquí. Algo como esto es lo que querrías:

Al obtener el meta del post, lo harías

get_post_meta($ID, 'enterprise_on_page', false);

La actualización sería la más diferente. Si solo desea agregar un valor, haga

add_post_meta($ID, 'enterprise_on_page', $value);

Para actualizar un valor,

update_post_meta($ID, 'enterprise_on_page', $new_value, $old_value);

Y para eliminar un valor:

delete_post_meta($ID, 'enterprise_on_page', $value_to_delete);

    
respondido por el John P Bloch 18.11.2014 - 16:23
2

No creo que puedas con precisión comparar los valores para una Serialized Array , que sucede cuando pasa una matriz a update_post_meta , necesita obtener todo el valor durante su bucle usando

get_post_meta( $post->ID, 'enterprise_on_page', 1 )

Si necesita especificar consultas basadas en estos valores, es mejor guardarlas por separado.

Vea esta pregunta para obtener más información:

meta_query con valores meta como serializar arrays

    
respondido por el Howdy_McGee 18.11.2014 - 16:14

Lea otras preguntas en las etiquetas