Matriz de claves meta_query de WordPress

2 minutos de lectura

estoy usando el: http://www.farinspace.com/how-to-create-custom-wordpress-meta-box/ función para crear algunas meta cajas personalizadas.

Mi WP_Query se ve así:

            $args = array(
                'post_type' => 'testimonials',
                'post_status' => 'publish',
                'orderby' => checked((bool) $instance['testimonials_random'], true, false) ? 'rand' : 'id',
                'posts_per_page' => $testimonials_number,
                'paged' => get_query_var('page'),
                'meta_query' => array(
                    array(
                        'key' => '_my_meta["addtosidebar"]',
                        'value' => 'on',
                        'compare' => 'LIKE'
                    )
                )
            );
            $query = new WP_Query($args);

La casilla de verificación de entrada addtosidebar se ve así:
<input type="checkbox" name="_my_meta[addtosidebar]" <?php checked((bool) $meta['addtosidebar'], true); ?> class="checkbox" />

¿Tiene alguna idea de cómo puedo acceder a la clave en meta_query?

Gracias, cip

avatar de usuario
ricardo m

No creo que pueda hacer eso, ya que en el tutorial que vinculó a los valores meta se almacenan en una matriz, que luego se serializa en un solo campo de base de datos. Entonces terminas con algo como esto en la base de datos: a:4:{s:12:"addtosidebar";s:2:"on";s:3:"foo";s:3:"bar";}.

La siguiente metaconsulta podría funcionar, pero sería mejor usar un campo personalizado separado.

'meta_query' => array(
  array(
    'key' => '_my_meta',
    'value' => 's:12:"addtosidebar";s:2:"on";',
    'compare' => 'LIKE'
  )
)

  • fue así: 'meta_query' => array( array( 'key' => '_my_meta', 'value' => 'addtosidebar', 'compare' => 'LIKE' ) )

    – Ciprián Tepes

    18 de mayo de 2011 a las 8:33


avatar de usuario
lío poderoso

it was like this: 'meta_query' => array( array( 'key' => '_my_meta', 'value' => 'addtosidebar', 'compare' => 'LIKE' ) ) – CIPPO Design

Esto funcionó para mí, creo que debería agregarse como respuesta. Una cosa, como señaló Richard, la entrada en la base de datos está serializada. Así que ‘LIKE’ básicamente buscará el ‘valor’ ‘addtosidebar’ en esa cadena.

Por ejemplo, si tengo una meta matriz como esta:

Publicación 1:

$myMeta = array('medium' => 'video', 'sometext' => 'a beautiful video')

Publicación 2:

$myMeta = array ('medium' => 'image', 'sometext' => 'a beautiful image of a video button')

Eso significa que usar la comparación ‘LIKE’ en ‘video’ devolverá ambos, ya que el video también se encuentra en el valor ‘sometext’ de la segunda publicación. Para detener eso, tuve que agregar las comillas para restringirlo:

$query->set( 'meta_query' , array(
                              array(
                                'key' => 'blogInfo',
                                'value' => '"video"',
                                'compare' => 'LIKE'
                            )
                            ));

Espero que ayude a alguien y que logre tener sentido.

PD: Lo siento, no soy lo suficientemente importante como para comentar.

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad