web-dev-qa-db-fra.com

Requêtes et commandes par champs personnalisés

J'essaie d'interroger un type de message personnalisé "jogos" dont la méta valeur "data_de_lancamento" (date de lancement) est <= à celle d'aujourd'hui. Ce champ utilise le format jj/mm/aa.

Les articles retournés à partir de cette requête doivent ensuite être classés en ordre décroissant par le champ personnalisé "vues".

Mon code actuel est:

date_default_timezone_set('Europe/Lisbon');
$data = date("d/m/y");
global $wpdb;

$sql = "SELECT wposts.*
FROM $wpdb->posts wposts, $wpdb->postmeta wpostmeta, $wpdb->postmeta wpostmeta2
WHERE wposts.ID = wpostmeta.post_id
AND wposts.ID = wpostmeta2.post_id
AND wpostmeta.meta_key = 'views'
AND wpostmeta2.meta_key = 'data_de_lancamento'
AND wpostmeta2.meta_value < $data
AND wposts.post_type = 'jogos'
AND wposts.post_status = 'publish'
ORDER BY wpostmeta.meta_value ASC";

$resultado = $wpdb->get_results($sql, OBJECT);
1
Tiago

Vous devez utiliser le paramètre meta_query de WP_Class lors de l'exécution d'une requête. Quelque chose comme cela devrait vous diriger dans la bonne direction.

$data = date("Y-m-d");
$args = array(
    'post_type' => 'jogos',
    'meta_query' => array(
        array(
            'key' => 'data_de_lancamento',
            'value' => $data,
            'compare' => '<='
        )
    ),
    'meta_key' => 'views',
    'orderby' => 'meta_value',
    'order' => 'DESC'
 );
$query = new WP_Query( $args );

Le problème, c'est qu'il est presque impossible de comparer les dates sous la forme "jj/mm/aa". En tant que tel, ce code ne fera pas l'affaire. Vous devez d’abord changer le format de votre date en "aaaa-mm-jj". C'est un moyen beaucoup plus utile de comparer les dates. En outre, vous devrez peut-être effectuer des tests avec l'opérateur pour vous assurer qu'il fonctionne correctement.

Notez que je spécifie en utilisant meta_query qui est nouveau pour WP 3.1. meta_key et meta_value sont obsolètes à partir de WP 3.1; Cependant, pour commander par meta_value, vous devez encore spécifier meta_key comme valeur par laquelle vous souhaitez le commander. Déroutant et pas bien documenté.

Références:

http://codex.wordpress.org/Function_Reference/WP_Query#Custom_Field_Parameters

http://codex.wordpress.org/Function_Reference/WP_Query#Order_.26_Orderby_Parameters

1
tollmanz