web-dev-qa-db-fra.com

Comment faire un wp_query avec deux champs acf, en triant l'un d'eux

J'ai deux champs personnalisés avancés, note de bas de page et date_edited (un champ datepicker). Ce que je veux réaliser, c'est exécuter un wp_query la note de bas de page n'est pas vide. La sortie que je veux triée en fonction de date_edited .

J'ai essayé plusieurs solutions sans pouvoir résoudre ce problème.

C'est mon meilleur essai:

$args = array(
    'post_type' => 'page',
    'meta_query' => array(
        'relation'      => 'AND',
        array(
            'key' => 'footnote',
            'value'   => array(''),
            'compare' => 'NOT LIKE'
        ),
        array(
            'key' => 'date_edited',
            'value'   => array(''),
            'type' => 'DATE',   
            'compare' => '='                                        
            'orderby' => 'meta_value_num',
            'order' => 'DESC'
        )
    ),
    'post_status' => 'publish',
    'posts_per_page' => 10,
    'no_found_rows' => true
);

Évidemment cela ne fonctionne pas. -Et c'est le tableau date_edited qui n'est pas correct. Est-ce que quelqu'un voit mes erreurs et a une solution correcte à afficher?

EDIT après que @majick ait répondu

Cela marche. Et voici une petite modification de la suggestion de @ majick:

$args = array(
    'post_type' => 'page',
    'meta_query' => array(
        array(
            'key' => 'footnote',
            'compare' => 'EXISTS',
        ),
    ),
    'post_status' => 'publish',
    'posts_per_page' => 10,
    'no_found_rows' => true,
    'orderby' => 'meta_value_num',
    'meta_key' => 'date_edited',
    'order' => 'DESC'
);
1
erolha

Vous confondez simplement les niveaux de tableau, l'ordre n'est pas effectué à l'intérieur du niveau meta_query, mais au niveau de la requête principale. C'est la différence entre deux classes:

https://codex.wordpress.org/Class_Reference/WP_Queryhttps://codex.wordpress.org/ Classe_Référence/WP_Meta_Query

En outre, comme l'indique la méta-requête codex: "La valeur d'un champ personnalisé ne peut être un tableau que lorsque la comparaison est 'IN', 'NOT IN', 'BETWEEN' ou 'NOT BETWEEN'" ... EQUALS ici pour vérifier la valeur de la note de bas de page est définie ... Je ne pense pas que vous ayez besoin de vérifier si date_edited existe, vous avez donc une requête beaucoup plus simple:

$args = array(
    'post_type' => 'page',
    'meta_query' => array(
        'key' => 'footnote',
        'value'   => '',
        'compare' => 'NOT EQUALS'
    ),
    'post_status' => 'publish',
    'posts_per_page' => 10,
    'no_found_rows' => true,
    'orderby' => 'meta_value_num',
    'meta_key' => 'date_edited',
    'order' => 'DESC'
);

Espérons que cela aide ... et que votre fièvre a cassé? :-)

0
majick