web-dev-qa-db-fra.com

get_posts with meta_compare = 'LIKE' ne fonctionne pas

J'utilise le code suivant:

$tolettpe = "Sale";//default
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);

La valeur dans la base de données est 'Sale ||' et il n'y a pas de variables de chaîne de requête dans la demande.

Mais la requête ne renvoie aucun résultat.

Si j'utilise la valeur exacte et sans meta_compare, cela fonctionne.

Des idées comment faire ce travail?

5
inarilo

meta_compare Les valeurs possibles sont '!=', '>', '>=', '<', or '<='. La valeur par défaut est '='

si vous voulez utiliser LIKE, vous devez créer un meta_query, par exemple:

$tolettpe = "Sale";//default
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 requête générée place le terme de recherche entre deux signes%, il n'est donc pas nécessaire d'en ajouter dans le code.

8
Bainternet