使用SQL获取带有类别的帖子术语

时间:2018-07-02 作者:Djave

我对type 以及category.

如何返回type 单个职位的任期category?

我知道我可以做到:

// Final array of all types:
$allTypesFromThisCategory = [];


if (have_posts()) : while (have_posts()) : the_post();
    $types = wp_get_post_terms( $post->ID, \'type\' );
    foreach($types as $type){
        // Pseudo code:
        if( ! in_array($type, $allTypesFromThisCategory) ){
            // Add the type to the array
            $allTypesFromThisCategory[] = $type;
        }
    }
endwhile; endif;

print_r($allTypesFromThisCategory);
但这有几个问题。

大约有1000个帖子,所以速度会很慢posts_per_page 不是-1此查询并不总是反映所有types 在所有帖子中,只有当前页面上的帖子

global $wpdb;
$results = $wpdb->get_results( "SELECT * FROM ...", OBJECT );
其中... 表示:

使用当前category 分类法posts 有了这个category 分类ID全选types 它们的分类posts。。。但问题是我在编写连接和原始SQL方面做得不好。

1 个回复
SO网友:Krzysiek Dróżdż

以下是解决方案:

global $wpdb;
$wpdb->get_results( $wpdb->prepare(
    "SELECT tags.*, COUNT(tags_rel.object_id) as posts_count
    FROM
        {$wpdb->prefix}terms tags
        INNER JOIN {$wpdb->prefix}term_taxonomy tags_tax ON (tags_tax.term_id = tags.term_id)
        INNER JOIN {$wpdb->prefix}term_relationships tags_rel ON (tags_tax.term_taxonomy_id = tags_rel.term_taxonomy_id)
        INNER JOIN {$wpdb->prefix}posts posts ON (tags_rel.object_id = posts.ID)
        INNER JOIN {$wpdb->prefix}term_relationships cats_rel ON (posts.ID = cats_rel.object_id)
        INNER JOIN {$wpdb->prefix}term_taxonomy cats_tax ON (cats_rel.term_taxonomy_id = cats_tax.term_taxonomy_id)
        INNER JOIN {$wpdb->prefix}terms cats ON (cats.term_id = cats_tax.term_id)
    WHERE
        tags_tax.taxonomy = \'type\'
        AND cats_tax.taxonomy = \'category\'
        AND posts.post_type = \'post\'
        AND posts.post_status = \'publish\'
        AND cats.term_id = %d
    GROUP BY tags_tax.term_id",
    <CATEGORY_TERM_ID>  // <-- here goes the category id of current category
) );
请记住,这是一个很好的进行缓存的机会。这些标签本身不会改变。因此,您可以计算它们一次,然后它们使用那些缓存的值。这样,它们将仅在保存帖子时计算。。。

结束

相关推荐

无法使用$wpdb方法查询自定义表

我使用Sequel Pro为我的Wordpress站点创建了一个自定义表。然后,我尝试使用$wpdb方法从Wordpress PHP文件中查询表。虽然我能够使用标准Wordpress表成功运行查询,但它不适用于我创建的自定义表。所以这一个有效:<?php global $wpdb; $result = $wpdb->get_results ( \" SELECT * FROM $wpdb->users