QUERY_POST和wpdb返回不同结果

时间:2013-05-09 作者:B L Praveen

我正在尝试按类别获取woocommerce产品。。当我使用wpdb进行查询时,它会正确地获取存在于后端产品列表中的产品。但是,当我使用query\\u posts进行查询时,它会得到另一组未在后端列出的产品。

为什么会出现这种差异?

     global $post, $wpdb;                   


    $query = "SELECT $wpdb->posts.* FROM $wpdb->posts
    LEFT JOIN $wpdb->term_relationships ON
    ($wpdb->posts.ID = $wpdb->term_relationships.object_id)
    LEFT JOIN $wpdb->term_taxonomy ON
    ($wpdb->term_relationships.term_taxonomy_id = $wpdb->term_taxonomy.term_taxonomy_id)
    WHERE $wpdb->posts.post_status = \'publish\'
    AND $wpdb->term_taxonomy.taxonomy = \'product_cat\'
    AND $wpdb->term_taxonomy.term_id = 1
    $childcond
    ORDER BY post_date DESC"; 

    if ($wpdb->num_rows > 0) {
        foreach ($postresults as $post) { 
              //process product item
        }
    }
使用query\\u post

 query_posts(\'cat=1&showposts=-1\');

2 个回复
SO网友:s_ha_dum

首先,不要使用query_posts. 抄本:

query\\u posts()是更改WordPress用于显示帖子的主查询的最简单但不是首选或最有效的方法。它通过将主查询放在一边,并用新查询替换它来实现这一点。要在调用query\\u posts后进行清理,请调用wp\\u reset\\u query(),原始主查询将被还原。

强烈建议您改用pre\\u get\\u posts操作,并通过检查is\\u main\\u query来更改主查询

其次,您的查询是不同的。

比较两者。使用这些参数生成的查询--\'cat=1&showposts=-1\'-- 是:

SELECT 
  wp_posts.* 
FROM wp_posts  
INNER JOIN wp_term_relationships ON (
  wp_posts.ID = wp_term_relationships.object_id
) 
WHERE 1=1  
AND ( 
  wp_term_relationships.term_taxonomy_id IN (1) 
) 
AND wp_posts.post_type = \'post\' 
AND (wp_posts.post_status = \'publish\') 
GROUP BY wp_posts.ID 
ORDER BY wp_posts.post_date DESC
手写查询有两个LEFT JOIN不是一个INNER JOIN. 您的查询还有一个名为$childcond-- 不知道那是什么。它还具有特定term_taxonomy.taxonomy 而且没有GROUP BY.

SO网友:Milo

您正在查询两种不同的分类法-在wpbd 查询您的参考product_cat. 在呼叫中query_posts 您可以通过cat 论点

作为旁白,您应该使用WP_Query 而不是query_posts.

结束

相关推荐

Plugins_url()可以在除wp_reqister_script()之外的任何地方运行

所以我应该提前提到,我正在开发一个插件,所以我的url是“mysite”。com/plugin“(以防万一这与我的问题有关。因此,在我的主插件文件(myplugin.php)中,我添加了以下内容:$plugin_url = plugins_url(\'/my-plugin-directory/\'); 紧接着wp_enqueue_style(\'wp_enqueue_scripts\', $plugin_url . \'css/boxes.css\'); 很好,到目前为止还不错。插件u