我的wordpress网站上有一个部分,目前显示列表的子类别和父类别。我想只显示子类别。我无法自己找出解决方案,感谢您的帮助。
以下是我正在使用的当前代码(也显示父类别):
<?php
//NEW
$permalink = get_permalink( $id );
//NEW
$seo = get_the_title()." : ";
$Category_links = ' Found in the ';
$term_list_category = wp_get_post_terms(get_the_ID(), 'listings_categories', array("fields" => "ids"));
//THIS CODE REMOVES PARENTS FROM BEING DISPLAYED IN THE LISTING CATEGORIES
foreach ($term_list_category as $k=>$term) {
$children = get_term_children( $term, 'listings_categories');
if ($children)
unset($term_list_category[$k]);
}
$i = 0;
$count = count($term_list_category);
if ( $count > 0 ){
foreach ( $term_list_category as $term_category ) {
$thisCat = get_term_by( 'id', $term_category, 'listings_categories');
//NEW
$url = '<a id="'.$term_category.'" slug="'.$thisCat->{'slug'}.'" class="listing-links-cat" href="#" title="'.$thisCat->{'name'}.'" >'.$thisCat->{'name'}.'</a>';
$i ++;
$seo .= " " . $thisCat->{'name'} . "";
$Category_links .= " " . $url . "";
if($count-1 == $i){
$Category_links .= " and "; $seo .= ", ";
}elseif($count > 1 && $count !== $i){
$Category_links .= ", "; $seo .= ", ";
}
}
$Category_links .= " Categories";
?>
<? echo $Category_links; ?>
但我觉得整体代码可以提高性能,所以它不会搜索数据库那么多?
答案 0 :(得分:1)
您的代码非常无效,并且还有不必要的部分。你的附加部分会使你的代码更加无效并导致你难以点击数据库。
只有从帖子条款中获取术语ID才能获得加1,但不幸的是,在这种特定情况下,这会篡改您的代码,这是您无效的起点,因为您需要使用{{1在{{1>}循环的每次次迭代。这意味着每次迭代都需要额外的db调用,以便本来应该已经存在
使用get_term_by()
会增加foreach
循环的每次迭代所进行的db调用量。同样,你正在为那些本来应该存在的东西进行不必要的数据库调用
完全没必要计算get_term_children()
返回的字词数量。这会给您的代码带来额外的不足。如果没有条件,则foreach
返回空数组;如果分类不存在,则返回wp_get_post_terms
对象。请稍后再考虑
让我们看看我们可以做些什么来使你的代码更有效
从wp_get_post_terms
中删除WP_Error
参数。由于我们需要的不仅仅是术语的ID,我们需要返回完整的术语对象。您可能认为这是无效的,但这会为您节省大量数据库命中,最重要的是时间,因为您正在摆脱fields
和wp_get_post_terms
没有正确的方法可以从get_term_by()
中移除父级,因此最好的方法是循环遍历它们并使用get_term_children()
忽略/跳过它们。我假设您正在讨论将wp_get_post_terms()
分配给continue
属性的顶级字词,因此您只需要检查父值是否为0
始终执行正确的故障检查。如果您不这样做,并且您的代码失败,则返回php错误和通知,这称为错误。你会想要避免这种情况。此外,您总是希望您的代码以受控的,预期的方式失败而不会出现错误。正如我之前所说,$parent
返回一个空数组或0
对象,因此这是您需要检查的内容。如果出现任何这种情况,请立即停止执行并返回函数以避免错误和意外输出
我喜欢让我的模板文件简短而甜蜜。出于这个原因,上面的庞大代码总是进入一个函数,然后我只需要在我的模板文件中调用该函数。另外,只是一个提示,我有功能特定的函数文件,以保持我的代码组织,而不是重载functions.php。我的functions.php文件通常不超过100行代码。
例如,这是你的帖子元的一部分,所以这将进入一个包含其他元函数的文件,比如显示autor名称和发布日期。
wp_get_post_terms()
您现在可以简单地在模板中调用该函数,如下所示:
WP_Error
这会生成一个像这样的列表
这里的一些文字可能从以下开始:术语名称1,术语名称2,术语名称3最后可能是某些内容
上面的代码未经测试,可能有点儿麻烦。
上面的代码是你需要的。您可以根据自己的需要扩展和滥用它。扩展的一些想法可能是在一些参数中工作,您可以选择是否显示父项,以及函数是否应返回一个术语名称字符串或一组术语名称。天空是这里的极限
您可以构建缓存系统来缓存结果,以进一步优化这些结果。
上面的代码现已经过测试,正在按预期工作