我创建了一个简单的短代码来输出属性术语并链接到它们各自的档案。我希望能够按字母拆分结果,以便它们输出如下:
A
Adidas
Askwith
B
Bonham
Burberry
...在HTML中看起来像这样:
<span id="a">A</span>
<ul class="brandlist">
<li><a href="/brand/adidas">Adidas</a></li>
<li><a href="/brand/askwith">Askwith</a></li>
</ul>
<span id="b">B</span>
<ul class="brandlist">
<li><a href="/brand/bonham">Bonham</a></li>
<li><a href="/brand/burberry">Burberry</a></li>
</ul>
但是我对如何做到这一点有点茫然。我读过几篇文章,建议为这些字母创建一个新的自定义分类法,但这似乎离完成我希望可以以更简单的方式解决的事情还有很长的路要走。
这是我到目前为止创建的简码:
function brands_output( $atts ){
ob_start();
echo '<ul class="brandlist">';
$terms = get_terms( array(
'taxonomy' => 'pa_brand',
'orderby' => 'name',
'hide_empty' => false,
)
);
foreach ( $terms as $term ) {
$brand = $term->name;
$slug = $term->slug;
echo '<li><a href="/brand/'.$slug.'/">'.$brand.'</a></li>';
}
echo '</ul>';
$output = ob_get_clean();
return $output;
}
add_shortcode( 'showbrands', 'brands_output' );
我如何做到这一点?
谢谢
这是您功能齐全的简码。我已经用一组不同的术语对其进行了测试,并且它可以完美运行(因此,我希望您的设置是正确的并且也可以运行)。
首先,我准备一个二维数组中的数据,其中级别1的字母字母和级别2的相应术语对名称/子词对。
在我对这个二维数组进行迭代以制作您想要的显示之后……
这是代码:
if (!function_exists('showbrands')) {
function showbrands(){
$term_arr = array();
$terms = get_terms( array(
'taxonomy' => 'pa_brand',
'orderby' => 'name',
'hide_empty' => false,
) );
foreach ( $terms as $term ) {
$brand = $term->name;
$slug = $term->slug;
// Getting the first letter of $brand term name
$letter = substr($brand, 0, 1);
// PREPARING DATA IN A BI DIMENSIONAL ARRAY
// Inserting the $letter in an array just once (array level 1)
// Inserting for each letter all the corresponding pairs "$brand => $slug" (array level 2)
if(!array_key_exists($letter, $term_arr))
$term_arr[$letter] = array($slug => $brand);
else
$term_arr[$letter][$slug] = $brand;
}
$output = '<div class="brandlist-container">';
// ITERATING IN THE BI DIMENTIONAL $TERM_ARR ARRAY
// first level the letters
foreach( $term_arr as $key_letter => $terms_in_letter ){
$output .= '<span id="'. strtolower( $key_letter ) .'">'. $key_letter .'</span>
<ul class="brandlist">';
// second level the $brand / $slug pairs
foreach( $terms_in_letter as $key => $value ){
$output .= '<li><a href="/brand/'.$key.'/">'.$value.'</a></li>';
}
$output .= '</ul>';
}
$output .= '</div>';
return $output;
}
add_shortcode( 'showbrands', 'showbrands' );
}
此代码位于您的活动子主题(或主题)的function.php文件上或任何插件文件中。
此代码已经过测试并且可以工作。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句