web-dev-qa-db-fra.com

Requête de sélection personnalisée avec types de publication personnalisés

J'essaie de comprendre le problème avec ça depuis une heure, mais je me suis heurté à un mur. Fondamentalement, j'essaie simplement d'interroger mon type d'article personnalisé en fonction de certains champs de date personnalisés, puis de les afficher. Quelqu'un a une idée où je vais mal?

<?php    
// - query -
                 global $wpdb;
                 $yesterday = strtotime("-1 day");
                 $querystr = "
                    SELECT *
                    FROM $wpdb->posts
                    INNER JOIN {$wpdb->postmeta}postmeta m1
                      ON ( {$wpdb->posts}posts.ID = m1.post_id )
                    INNER JOIN {$wpdb->postmeta}postmeta m2
                      ON ( {$wpdb->posts}posts.ID = m2.post_id )
                    WHERE $wpdb->posts.post_type = 'tf_events'
                    AND $wpdb->posts.post_status = 'publish'
                    AND ( m1.meta_key = 'tf_events_startdate' AND m1.meta_value > $yesterday )
                    AND ( m2.meta_key = 'tf_events_starttime')
                    ORDER BY m1.meta_key ASC, m2.meta_key ASC LIMIT 30
                 ";

                 $events = $wpdb->get_results($querystr, OBJECT);

                if ($events):
                global $post;
                foreach ($events as $post):
                setup_postdata($post);

                // - variables -
                $custom = get_post_custom(get_the_ID());
                $sd = $custom["tf_events_startdate"][0];
                $ed = $custom["tf_events_enddate"][0];
                $st = $custom["tf_events_starttime"][0];
                $et = $custom["tf_events_endtime"][0];
                $post_image_id = get_post_thumbnail_id(get_the_ID());
                        if ($post_image_id) {
                                $thumbnail = wp_get_attachment_image_src( $post_image_id, 'post-thumbnail', false);
                                if ($thumbnail) (string)$thumbnail = $thumbnail[0];
                        }

                // - output -
                ?>

                    <div>Show the goodies</div>

              <?php endforeach; ?>

              <?php else : ?>
                <h2 class="center">Not Found</h2>
                <p class="center">Sorry, but you are looking for something that isn't here.</p>
              <?php endif; ?>

Merci d'avance :)

2
Noel Tock

Je voudrais vérifier la sortie de $querystr. Il semble que vous ayez le nom de la table deux fois. $wpdb->postmeta résout quelque chose comme wp_postmeta et vous avez à nouveau postmeta. Cela vous donne wp_postmetapostmeta qui n'est pas une table valide.

Je vous recommande fortement d’essayer Barre de débogage . Cela simplifie grandement le débogage des requêtes.

3
Ethan Seifert

Près de cette requête (dunno si vous pouviez choisir plusieurs méta-clés - c’est possible avec orderby):

$tf_events_query = new WP_Query( array(
     'post_type'        => 'tf_events'
    ,'posts_per_page'   => '30'
    // ordered by meta_valu AND date
    ,'orderby'          => 'meta_value date'
    // or if the meta key value is numeric ordered by num meta value AND date
    // ,'orderby'       => 'meta_value_num date'
    ,'meta_key'         => 'tf_events_startdate'
    ,'order'            => 'ASC'
) );
1
kaiser

Enfin obtenu, merci pour l'aide les gars ...

<?php
        $querystr = "
            SELECT *
            FROM $wpdb->posts wposts, $wpdb->postmeta metadate, $wpdb->postmeta metatime
            WHERE (wposts.ID = metadate.post_id AND wposts.ID = metatime.post_id)
            AND (metadate.meta_key = 'tf_events_startdate' AND metadate.meta_value > $yesterday )
            AND metatime.meta_key = 'tf_events_starttime'
            AND wposts.post_type = 'tf_events'
            AND wposts.post_status = 'publish'
            ORDER BY metadate.meta_value ASC, metatime.meta_value DESC LIMIT 30
         ";

?>

1
Noel Tock