找出给定类别中的前5个来源(来源是自定义分类)

时间:2013-02-03 作者:Average Joe

我正在使用的客户端有数千篇文章和媒体(音频/视频)文件。在WordPress上,所有这些都是由作者ID 1发布的,我们将其命名为STAFF。

实际上,所有内容都是由不同的人和来源创建的,当然不是由工作人员创建的。

为了保留这些信息(创建内容的人或源所在地),我使用了一种称为“源”的非层次自定义分类法。如果源恰好是一个机构名称,我会按机构名称标记内容,如下所示。

示例:

来源:CNN来源:华盛顿邮报

如果来源恰好是个人,我会在名字前面加上前缀“by”。

示例:

资料来源:安德森·库珀资料来源:乔恩·斯图尔特

当然,内容已经相应地进行了标记和分类。

现在的问题是,如何有效地找出XYZ类中排名前5位的来源是谁?

我认为这不能通过使用wp\\u query args来实现-通过点击高级税务查询部分,因为wp\\u query args最终只返回帖子。在这里,我们要求条件作为回报。

一种可能的方法如下

以XYX类别为例

逐一浏览所有XYX分类的帖子,尤其要注意这些帖子中的源数据,在浏览的同时,将这些帖子中遇到的每个源术语id转储到一个临时表中。(为此,您将使用wp\\u terms、wp\\u term\\u关系和wp\\u term\\u分类法,以及您创建的mySQL表)

浏览完该类别中的所有帖子后,您最终将注意力转移到临时表上

并在该表上获得摘要,在分组之后获得(源)术语计数,最后获得前5名。

但是把所有这些都放在一份声明中?那还不是我喜欢的。

1 个回复
SO网友:Average Joe

感谢wp黑客列表中关于这个问题的一些线索,以及一些Google搜索,以下是我问题的答案

$sql = "SELECT count(*) as count,terms2.name as tag FROM wp_posts as p1
     LEFT JOIN wp_term_relationships as r1 ON p1.ID = r1.object_ID
     LEFT JOIN wp_term_taxonomy as t1 ON r1.term_taxonomy_id = t1.term_taxonomy_id
     LEFT JOIN wp_terms as terms1 ON t1.term_id = terms1.term_id,

     wp_posts as p2

     LEFT JOIN wp_term_relationships as r2 ON p2.ID = r2.object_ID
     LEFT JOIN wp_term_taxonomy as t2 ON r2.term_taxonomy_id =t2.term_taxonomy_id
     LEFT JOIN wp_terms as terms2 ON t2.term_id = terms2.term_id

     WHERE

     t1.taxonomy = \'category\' AND p1.post_status = \'publish\' AND terms1.name = \'YOUR CATEGORY NAME HERE\' 
     AND
     t2.taxonomy = \'THAT OTHER CUSTOM TAXONOMY HERE - IN MY CASE THAT IS TO BE SOURCE\' AND p2.post_status = \'publish\'

     AND p1.ID = p2.ID

     GROUP BY tag

     ORDER BY count DESC limit 5
 ";


global $wpdb;
$terms = $wpdb->get_results($sql,ARRAY_A);
foreach ($terms as $term):
    extract($term);
    echo "$tag,";
endforeach;
当我将WHERE to be调整为

WHERE t1.taxonomy = \'category\' AND p1.post_status = \'publish\' AND terms1.name = \'DESIRED CATEGORY NAME HERE\' AND t2.taxonomy = \'Source\' AND p2.post_status = \'publish\'

我不建议在高流量站点中使用SQL,但要使用一些临时缓存,为什么不呢?

结束

相关推荐

如何在WordPress的主栏和侧栏中同时访问相同的MySQL数据库?

我已经为我的Wordpress站点编写了一些基本的定制PHP代码。代码基本上访问MySQL数据库(与wordpress数据库不同的数据库)并显示信息。除了在主页上运行它之外,我还需要在侧边栏上运行它。代码在主页或侧栏中运行良好,但当我将代码同时放在主页和侧栏中时,侧栏中出现以下错误:Fatal error: Call to a member function prepare() on a non-object in /home/kimusubi/public_html/wp-content/plugins