¿Es posible usar un comodín en la función get_posts()?
Ya hice la consulta que quería en SQL:
select * from wp_posts p
left join wp_postmeta pm on p.id = pm.post_id
where pm.meta_key like 'additional_downloads%' and pm.meta_value = 81 and p.post_status = "publish"
Lo que me da los resultados que quiero.
Luego intenté usar para hacer eso con la función integrada get_posts() en WordPress:
get_posts(array('meta_key' => 'additional_downloads%', 'meta_value' => 81))
Pero eso me da 0 resultados. La razón por la que necesito este comodín es porque una publicación puede tener más de 1 descarga adicional, y esas se almacenan en la tabla wp_postmeta con las meta_keys ‘additional_downloads_0’, ‘additional_downloads_1’, etc.
¿Alguna idea de cómo hacer esto usando las funciones de wordpress?
Podemos filtrar la WHERE
cláusula de la consulta.
EL FILTRO
add_filter( 'posts_where', function ( $where, \WP_Query $q )
{
// Check for our custom query var
if ( true !== $q->get( 'wildcard_on_key' ) )
return $where;
// Lets filter the clause
$where = str_replace( 'meta_key =', 'meta_key LIKE', $where );
return $where;
}, 10, 2 );
LA CONSULTA
$args = [
'suppress_filters' => false,
'wildcard_on_key' => true,
'meta_query' = [
[
'key' => 'additional_downloads_%',
'value' => 81
]
]
];
$q = get_posts( $args );
-
¡Excelente! No estaba al tanto de esta posibilidad de anular la funcionalidad de consulta, una forma agradable y limpia de hacerlo 🙂 ¡Gracias!
– Danny vagabundo
10 de febrero de 2016 a las 9:15