$ wpdb查询未运行

时间:2013-09-03 12:49:19

标签: php sql wordpress wpdb

我正在处理一个wpdb查询,它只是没有运行。由于某种原因,wpdb的错误报告没有给我任何错误。

那么,有人能在这个查询中发现一个明显的错误吗?

我正在尝试获取meta_value表中所有_sell_media_attached_file个密钥的post_meta

我首先运行wp_query,获取帖子ID,然后通过wpdb查询运行每个帖子ID。

以下是我正在使用的内容:

        // run the loop 
        $loop = new WP_Query( array( 
            'post_type' => 'sell_media_item',
            'collection' => $club,
            'include_children' => false,
            'year' => $year,
            'monthnum' => $month,
            'day' => $day,
            'fields' => 'ids',
        ) );


        if ( $post_ids = $loop->get_posts() ) {

            $post_ids = implode( ',', $post_ids );

            //breaks here
            $atts_ids = $wpdb->get_col( "SELECT meta_value FROM $wpdb->postmeta WHERE post_id = $post_ids AND meta_key = '_sell_media_attached_file' " );
            echo('<b>query:</b> <pre>'); var_dump($atts_ids);

但正如我所说,var_dump中没有任何输出,如果我添加$wpdb->print_error();,我没有错误。

2 个答案:

答案 0 :(得分:2)

在你的代码中,我没有看到wpdb类的初始化来访问wordpress中的wpdb类,你必须将其定义为global来访问函数该类以及如果$post_ids包含以逗号分隔的多个ID,则必须使用IN()子句而不是=运算符

global $wpdb;

        // run the loop 
        $loop = new WP_Query( array( 
            'post_type' => 'sell_media_item',
            'collection' => $club,
            'include_children' => false,
            'year' => $year,
            'monthnum' => $month,
            'day' => $day,
            'fields' => 'ids',
            'nopaging'=>true
        ) );


        if ( $post_ids = $loop->get_posts() ) {

            $post_ids = implode( ',', $post_ids );

            //breaks here
            $atts_ids = $wpdb->get_col( "SELECT meta_value FROM $wpdb->postmeta WHERE post_id IN($post_ids) AND meta_key = '_sell_media_attached_file' " );
            echo('<b>query:</b> <pre>'); var_dump($atts_ids);

答案 1 :(得分:0)

为什么不试试这样的事情?

if( $loop->have_posts() ){
  $ids = $loop->get_posts();
  foreach( $ids as $id ){
    $atts_ids[] = get_post_meta($id, '_sell_media_attached_file', true|false ); //true if single value false if multiple values return as array
  }
}else{
  //Do something else
}

希望它有所帮助!