web-dev-qa-db-fra.com

Obtenir les messages par méta valeur avec date

J'ai un type de message appelé "agenda" et l'une de ses méta-valeurs est la date de l'événement. Comment puis-je obtenir les publications de l'année en cours en fonction de la méta-valeur?

J'ai essayé ceci args dessus mais cela ne fonctionne pas.

$args = array(  'post_type' => 'agenda',
                'posts_per_page' => -1,
                'sort_order' => 'asc',
                'meta_query' => array(
                    array(
                        'key' => 'date_event',
                        'value' => date('Y'),
                        'compare' => '=',
                        'type' => 'DATETIME'
                    )
                ),
                'meta_key' => 'date_event',
                'meta_type' => 'DATE',
                'orderby' => 'meta_value',
                'order' => 'ASC',
                'tax_query' => array(
                    array(
                    'taxonomy' => 'event_type',
                    'field' => 'term_id',
                    'terms' => $type_name)
                )
);
1
Thales Andrade

Dépend de ce que vous récupérez du champ post-méta 'date_événement'.

C'est probablement le coupable ici - s'il s'agit d'une date réelle avec un mois et un jour, elle ne correspondra pas à ce que vous obtenez à partir de la date ('Y'), qui va simplement être '2018'.

Vous pouvez vérifier la valeur dans 'date_événement' sur n'importe lequel des messages de l'agenda avec:

print_r (get_post_meta ($ post_id, 'date_event', true));

Si la valeur dans 'date_événement' est un horodatage Unix, cela facilite les choses car vous pouvez alors interroger toutes les dates commençant le 1 er janvier de l'année en cours, par exemple:

$first_of_year = strtotime( "1 January " . date( 'Y' ) );

$args = array(  'post_type' => 'agenda',
    'posts_per_page' => -1,
    'meta_key' => 'date_event',
    'orderby' => 'meta_value_num',
    'order' => 'ASC',
    'meta_query' => array(
        array(
            'key' => 'date_event',
            'value' => $first_of_year,
            'compare' => '>=',
        ).
    ),
    'tax_query' => array(
        array(
           'taxonomy' => 'event_type',
           'field' => 'term_id',
           'terms' => $type_name,
        )
    )
);

Si date_event vous donne une valeur telle que 20180320, vous pouvez faire quelque chose de similaire, mais avec ...

$first_of_year = date( 'Y' ) . '0101';

Si vous obtenez quelque chose comme '2018-03-29', vous devrez peut-être utiliser le 'type' => 'DATE' - mais si vous avez l'une des deux premières situations, vous n'en avez pas besoin.

Une autre chose: 'sort_order' n'est pas un paramètre valide, même s'il va simplement être ignoré). Vous voulez juste "ordre", ce que vous aviez quand même plus bas.

Lorsque vous comparez des valeurs numériques, il est recommandé de remplacer "orderby" => "meta_value" par "orderby" => "meta_value_num".

2
slashbob