如何减少对此自定义主页的数据库查询调用次数?

时间:2014-07-20 作者:WPRookie82

我正在设计一个博客,其类别层次结构如下(只是一个示例)

                                          PARENT
                                             |
                     |------------------------------------------------|
                   Food                                           Fashion
                     |                                                |
          |---------------------|                       |---------------------|
      European                Asian                  European               Asian
          |                     |                       |                     |
    |---------|           |-----------|             |--------|           |--------|
Italian    French      Chinese    Japanese       Italian  French     Chinese   Japanese
在主页上,我的客户希望显示所有4级儿童的最后三篇帖子,因此:

《家长>食品>欧洲>意大利》的最后三篇文章《家长>食品>欧洲>法国》的最后三篇文章《家长>食品>亚洲>中国》等。《家长>食品>亚洲>中国》的最后三篇文章。《家长>食品>欧洲>意大利》的最后三篇文章《家长>食品>亚洲>中国》等。《家长>食品>亚洲>中国》的最后三篇文章。《家长>食品>亚洲>中国》等。《家长>食品>欧洲>意大利>意大利》的最后三篇文章。《家长>食品>亚洲>中国》的最后三篇文章《家长>亚洲>中国》等。《家长>食品>等。《家长>亚洲>我的第一次尝试是这样的:

$allPosts = new WP_Query(\'cat=20, 21, 24, 22, 23, 25, 75, 84, 79, 85, 83, 96, 95, 97, 65, 68, 107, 48, 49&showposts=100&order=ASC\');
根据一个调试插件,页面上调用了18个查询,但我意识到这样的调用对我想要的内容没有任何意义,因为如果一个类别有2000篇帖子,那么此行将检索的100篇帖子都将来自同一类别。

因此,我将通话进行了拆分,如下所示:

$italianFood = new WP_Query(\'cat=20&showposts=3&order=DESC\');
$italianFashion = new WP_Query(\'cat=21&showposts=3&order=DESC\');
$frenchFood = new WP_Query(\'cat=24&showposts=3&order=DESC\');
$frenchFashion = new WP_Query(\'cat=22&showposts=3&order=DESC\');
这是可行的,但在调用所有类别后,对数据库的查询调用次数增加到260!

我会用插件缓存页面,但我真的需要调用260多个DB才能实现我想要的吗?

1 个回复
最合适的回答,由SO网友:NightHawk 整理而成

您也可以编写自己的查询。这样,每个类别只有一个查询:

global $wpdb;

$query = \'
SELECT wpp1.*
FROM \' . $wpdb->posts . \' AS wpp1
LEFT JOIN \' . $wpdb->term_relationships . \' AS wptr1 ON wptr1.object_id = wpp1.ID
WHERE post_type = %s
AND post_status = %s
AND wptr1.term_taxonomy_id = %d
ORDER BY wpp1.post_date DESC
LIMIT %d
\';

$query = $wpdb->prepare(
    $query,
    // Args: post type, post status, term taxonomy ID, number of posts
    \'post\', \'publish\', 80, 3
);

$posts = $wpdb->get_results(
    $query,
    ARRAY_A
);

结束

相关推荐

Get all media categories

我为medias帖子类型添加了一个新的分类法:function register_taxonomy_for_images() { register_taxonomy_for_object_type(\'category\', \'attachment\'); } add_action(\'init\', \'register_taxonomy_for_images\'); 我还通过wordpress管理员添加了一些类别。如何获取我添加的所有媒体类