如何在不查询数据库的情况下获取类别链接

时间:2015-10-07 作者:Jonathan

我使用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, 但它也会引发类似的查询。

有没有办法在不触发数据库查询的情况下获取类别链接

1 个回复
最合适的回答,由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

相关推荐

如何读取WordPress$Query关联数组(散列)键的值

WordPress编程新手(来自更为传统的环境),并试图了解其一些“独特”特性。我们的网站上有一个目录页,此代码驻留在functions.php, 如果条件为true,则调整结果。if( $query->is_post_type_archive( \'directory\' ) ){ ...//do stuff } 我想知道如何获取is_post_type_archive 这就是“目录”当我对值使用测试时。。。var_dumb($query->is_post