我使用Wordpress 4.3.1PremiumPress Business Directory Theme. 主题的主页使用代码呈现类别列表,基本上是:
$args = array(
\'taxonomy\' => THEME_TAXONOMY, // \'listing\'
\'orderby\' => \'name\',
\'show_count\' => 0,
\'pad_counts\' => 1,
\'hierarchical\' => 0,
\'title_li\' => \'\',
\'include\' => $xcc,
\'hide_empty\' => 0,
);
$categories = get_categories($args);
foreach ($categories as $category) {
$LINK = get_term_link($category->slug, THEME_TAXONOMY);
// render with $LINK...
}
使用
Debug Bar, 我注意到,每个类别都会导致以下数据库查询:
SELECT t.*, tt.* FROM wp_terms AS t INNER JOIN wp_term_taxonomy AS tt ON t.term_id = tt.term_id WHERE tt.taxonomy = \'listing\' AND t.slug = \'%d7%94%d7%91%d7%a2%d7%94-%d7%95%d7%99%d7%a6%d7%99%d7%a8%d7%94\' LIMIT 1
(...), get_term_link, get_term_by
我试过使用
get_category_link
, 但它也会引发类似的查询。
有没有办法在不触发数据库查询的情况下获取类别链接如果没有,是否可以在单个查询中以某种方式检索这些内容
最合适的回答,由SO网友:TheDeadMedic 整理而成
这取决于你如何使用get_term_link()
- 由于您正在传递一个slug,WordPress无法在其内部缓存中找到该术语(术语按ID索引),因此它直接从db中获取该术语。
要使用缓存,请传递ID。更好的是,只传递对象:
get_term_link( $category ); // No need for taxonomy param when you pass a term object