Consulta de selección personalizada con tipos de publicación personalizados

2

He estado tratando de resolver el problema con esto durante la última hora, pero golpeando una pared. Básicamente, solo estoy intentando consultar mi tipo de publicación personalizada en función de algunos campos de fecha personalizados y luego mostrar cada uno. ¿Alguien tiene una idea de dónde me voy 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; ?>

Gracias de antemano :)

    
pregunta Noel Tock 08.02.2011 - 18:43

3 respuestas

3

Verificaría la salida de $querystr . Parece que tienes el nombre de la tabla dos veces. $wpdb->postmeta se resuelve en algo así como wp_postmeta y luego tienes postmeta otra vez. Esto te da wp_postmetapostmeta , que no es una tabla válida.

Le recomiendo que pruebe Debug Bar . Simplifica enormemente la depuración de consultas.

    
respondido por el Ethan Seifert 08.02.2011 - 19:26
1

Cerca de esta consulta (no sé si podría elegir varias claves de metadatos; es posible con 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'
) );
    
respondido por el kaiser 08.02.2011 - 19:28
1

Finalmente lo conseguí, gracias por la ayuda, chicos ...

<?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
         ";

? >

    
respondido por el Noel Tock 08.02.2011 - 19:54

Lea otras preguntas en las etiquetas