9
votes

Posts Requête, y compris Meta et supérieur à la date

Je suis en difficulté pour obtenir une solution de travail avec ce wp_query . J'ai actuellement des paramètres personnalisés qui sont affectés à des messages, l'un est de savoir si le message est «en vedette» et que la seconde est une date et une heure pour que le poste soit terminé (ne s'affiche plus dans les résultats). J'ai la requête qui fonctionne avec la fonctionnalité, mais il suffit de travailler cette date de fin, voici la requête Travailler à trouver avec la "figure": xxx

La date de fin est définie dans le wp_postmeta Tableau où meta_key est 'the_date' et le meta_values ​​ ressemble à ce '05 / 16/2013 05:24 '. Je voudrais éditer la requête ci-dessus où si "the_date" a été défini des messages ne sont inclus que si le "the_date" est plus grand que la date et l'heure actuelles.

Voici ma tentative infructueuse: xxx


0 commentaires

3 Réponses :


15
votes

Je devais faire quelque chose de très similaire récemment et j'ai fini par avoir besoin d'utiliser la propriété Meta_Query à la place. Vous voudrez faire quelque chose comme ceci: xxx

quelques notes ...

  • Je n'ai besoin que de filtrer par date dans mon exemple, mais il semble que vous ayez besoin de faire date / heure dans la tienne. (Vous pouvez simplement ajuster la première ligne pour la variable aujourd'hui à l'aide du format de votre choix).

  • Utilisez posts_per_page au lieu de showpostSs . showpoststs est obsolète.

  • Notez que j'ai inclus le meta_key deux fois (une fois au niveau supérieur de la matrice et une fois en tant qu'élément dans le tableau méta_query . Il y a une matrice connue Bug où vous ne pouvez pas trier vos résultats par la clé si vous n'incluez pas cela de cette façon. Je me suis battu que celui-ci aussi!

    J'espère que cela vous aide, amusez-vous!

    [edit] a oublié votre skiali_feature reculer dans la matrice.


3 commentaires

Bonjour merci pour votre réponse, je l'ai essayé mais n'a pas de résultat. Voici ma version: $ aujourd'hui = date ('d / m / y h: i'); $ args = tableau ('post_type' => 'post', 'posts_per_page' => '4', 'meta_key' => 'the_date', "META_QUERY" = >> "THE_DATE ', 'valeur' ​​=> $ aujourd'hui, 'comparer' => '> =')), 'orderby' => 'meta_value_num', 'ordre' => "ASC ');


Oh, je pense que je vois le problème. Nous essayons de comparer les valeurs string (la sortie de date ('d / m / yh: i') ne sera pas comparable comme une chaîne . Comment stockez-vous cette date / heure dans votre message? Est-ce un champ de texte FreeForm et vous assurez-vous simplement de saisir votre date et votre heure dans ce format? Ou est-ce qu'il le stocke en réalité comme une date / heure (ou horodatage ) champ dans la base de données?


@Paul, quelle était la solution ici? J'utilise ACF et la date d'étant la sortie est une chaîne, c'est donc tout ce que je dois trier avec ...



4
votes

Pour les personnes utilisant le plugin de champ personnalisé avancé avec un type de données de date, c'est ce dont vous avez besoin pour les dates supérieures ou égales à aujourd'hui:

    $today = date('Ymd');
    $args = array(
        'post_type' => 'post',            
        'meta_key' => 'end-date',
        'meta_query' => array(
            array(
                'key' => 'end-date'
            ),
            array(
                'key' => 'end-date',
                'value' => $today,
                'compare' => '>='
            )
        ),
        'orderby' => 'meta_value',
        'order' => 'ASC'
    );
   $your_custom_query = new WP_Query($args);


2 commentaires

Je ne peux pas le faire fonctionner du tout. Voici mes arguments de requête. Est-ce dû au format de date? Pastie.org/9433564 Je souhaite que l'ACF stockait à la fois la date conviviale et une horodatage pour ces situations.


Cela a parfaitement travaillé pour moi en utilisant des champs personnalisés avancés Pro V5. Merci.



1
votes

Pour les personnes qui utilisent Manager de métadonnées personnalisées Vous constaterez qu'un datePicker Le champ est stocké comme horodatage.

Donc, dans un cas similaire, l'exemple ci-dessus ne fonctionne pas et que vous avez peut-être que PHP trier la valeur dont vous avez besoin pour comparer. Et l'horodatage pendant une journée plus tôt à 23:59:59 Ça fera le travail: p> xxx pré>

si vous souhaitez également prendre en compte le réglage de fuseau horaire pour l'utilisation du blog actuel_time () comme dans l'exemple suivant: p>

    $now = current_time('timestamp');
    $yesterday = mktime(23, 59, 59, date('n',$now), date('j',$now)-1);


0 commentaires