如果我是你,我有两个选择。两者都取决于这样一个事实,即thsi是一个固有的昂贵计算,mysql的任何欺骗都不会减少您所拥有数据的负载。
所以
Option 1, do it the expensive way and store the data for a rainy day
你将不得不吞下计算这个的成本,但你不必一次又一次地这样做。以漫长而昂贵的方式进行计算,并将post ID保存在一个具有较长过期时间的瞬态中。你将有一次命中,然后它以超快的速度运行,直到瞬变结束。
对于奖励积分,请每天在wp cron任务中计算一次,并将到期时间设置为两天,
Option 2, create helper data
您有1个分类法和6个帖子类型。要解决这个问题,请创建另一个分类法,一个没有GUI的隐藏分类法。此分类法将仅附加到所需的帖子类型。
然后,钩住术语创建/删除/分配钩子,并使用它们复制分类数据,但仅针对该帖子类型。这样,当您想要创建列表时,您可以查询第二个隐藏的分类法,它充当排序缓存。在你做出改变的过程中,你要做的所有艰苦的工作就是找出哪个术语有多少个
仅仅因为您不知道如何有效地处理现有数据,并不意味着有解决方案,但更改提供给您的数据有时会带来很大的不同,这并不总是意味着添加更多缓存。
下面是一个克隆分类法的粗略示例:
class Clone_Taxonomy {
public $from = \'\';
public $to = \'\';
public function __construct($from, $to){
$this->from = $from;
$this->to = $to;
add_action( \'set_object_terms\', array(&$this,\'sync_set_object_terms\'),100,6);
}
public function sync_set_object_terms($object_id, $terms, $tt_ids, $taxonomy, $append, $old_tt_ids){
if($taxonomy == $this->from){
// duplicate to ovum_research_authors taxonomy
//$terms2 = array();
$r = wp_set_object_terms( $object_id, $terms, $this->to, $append );
if(!is_array($r)){
// things failed for whatever reason
}
}
}
}
$clone_tax = new Clone_Taxonomy(\'taxonomy1\',\'taxonomy2\');
在检查分类法后再进行一次检查,以确定它是哪种帖子类型,如果帖子类型匹配,请克隆该术语,否则不匹配。