get_posts con meta_compare='LIKE' no funciona - Solución

7 jul 2012, 04:20:34
Vistas: 14.4K
Votos: 6

Estoy usando el siguiente código:

$tolettpe = "Venta"; //valor por defecto
if($_REQUEST['tolettype']) $tolettpe = $_REQUEST['tolettype'];
else if($_REQUEST['srch_type']) $tolettpe = $_REQUEST['srch_type'];
$args = array(
    'numberposts'  => $latestcount,
    'category'     => $catidstr,
  'meta_key'     => 'property_type',
  'meta_compare' => 'LIKE',
  'meta_value'   => $tolettpe.'%'
 );
$post_content = get_posts($args);

El valor en la base de datos es 'Venta||' y no hay variables en la cadena de consulta de la solicitud.

Pero la consulta no devuelve resultados.

Si uso el valor exacto y no meta_compare, funciona.

¿Alguna idea de cómo hacer que esto funcione?

0
Todas las respuestas a la pregunta 1
3
13

meta_compare Los valores posibles son '!=', '>', '>=', '<', o '<='. El valor predeterminado es '='

Si deseas utilizar LIKE necesitas crear un meta_query, por ejemplo:

$tolettpe = "Sale"; //valor por defecto
if($_REQUEST['tolettype']) $tolettpe = $_REQUEST['tolettype'];
else if($_REQUEST['srch_type']) $tolettpe = $_REQUEST['srch_type'];
$args = array(
    'numberposts'  => $latestcount,
    'category'     => $catidstr,
    'meta_query' => array(
        array(
            'key' => 'property_type',
            'value' => $tolettpe,
            'compare' => 'LIKE'
        )
    )
);
$posts = get_posts($args);

La consulta generada coloca el término de búsqueda entre dos signos %, por lo que no es necesario agregarlos en el código.

7 jul 2012 12:59:28
Comentarios

gracias, lo he intentado pero no obtengo ningún resultado. ¿Hay alguna manera de imprimir la consulta que se está generando para poder ejecutarla directamente en la base de datos y depurarla?

inarilo inarilo
7 jul 2012 14:39:53

vale, encontré la respuesta a eso http://codex.wordpress.org/Editing_wp-config.php#Save_queries_for_analysis

inarilo inarilo
7 jul 2012 15:11:12

en realidad mi método original también funciona, ¡el signo de porcentaje extra era el problema!

inarilo inarilo
7 jul 2012 15:22:25