带有原生列表的 Wordpress 中的自定义类别列表 类
Custom Categories list in Wordpress with native list classes
尝试在侧边栏中构建自定义类别列表,第一部分成功,但无法正确使用 wordpress wp_list_categories()
。
基本上我的小部件创建了一个类别 ID 数组,这些 ID 被标记为 "New"
Array
(
[2] => Array
(
[title] => Blog Categories
[categories] => Array
(
[0] => 1
[1] => 5
)
)
[_multiwidget] => 1
)
现在我需要创建一个所有类别的列表,其中 ID - 1
的类别和 ID - 5
的类别将显示为
<li class="cat-item cat-item-1"><span style="color:red;">New!</span> <a href="/blog/category/mycategory1" title="mycategory special offer"><b>My Category 1</b></a></li>
<li class="cat-item cat-item-3"><a href="/blog/category/mycategory2" title="mycategory special offer">My Category 2</a></li>
<li class="cat-item cat-item-5"><span style="color:red;">New!</span> <a href="/blog/category/mycategory3" title="mycategory special offer 3"><b>My Category 2</b></a></li>
出于某种原因,我无法使用
完成任何事情
`wp_list_categories()` as it prints all categories out on the screen.
$widget_instances = get_option('widget_custom_categories_widget');
echo '<ul>';
foreach ( $categories as $category ) {
foreach ($widget_instances as $cat_key) {
foreach ($cat_key['categories'] as $key) {
if($category->term_id == $key){
printf('<li class="cat-item cat-item-%3$s"><span style="color: red;">New!</span> <a href="%1$s"><strong>%2$s</strong></a></li>',
esc_url(get_category_link($category->term_id)),
esc_html($category->name),
esc_html($category->term_id)
);
}else{
printf('<li class="cat-item cat-item-%3$s"><a href="%1$s">%2$s</a></li>',
esc_url(get_category_link($category->term_id)),
esc_html($category->name),
esc_html($category->term_id)
);
}
}
}
}
echo '<ul>';
我正在使用上面代码的图片,但现在我遇到了另一个问题,所有类别都打印了两次,一次有标签 "New!" 一次没有。
与嵌套的 foreach
语句有关,但无法弄清楚。
请提供任何帮助或建议
如果您的数组 $widget_instances
每次 returns 数组结构都按照您提供的方式构建,此技巧可能会对您有所帮助:
$cat_id = $widget_instances[2]['categories'];
echo '<ul>';
foreach ($categories as $category) {
if (in_array($category->term_id, $cat_id)) {
printf('<li class="cat-item cat-item-%3$s"><span style="color: red;">New!</span> <a href="%1$s"><strong>%2$s</strong></a></li>',
esc_url(get_category_link($category->term_id)),
esc_html($category->name),
esc_html($category->term_id)
);
} else {
printf('<li class="cat-item cat-item-%3$s"><a href="%1$s">%2$s</a></li>',
esc_url(get_category_link($category->term_id)),
esc_html($category->name),
esc_html($category->term_id)
);
}
}
echo '<ul>';
尝试在侧边栏中构建自定义类别列表,第一部分成功,但无法正确使用 wordpress wp_list_categories()
。
基本上我的小部件创建了一个类别 ID 数组,这些 ID 被标记为 "New"
Array
(
[2] => Array
(
[title] => Blog Categories
[categories] => Array
(
[0] => 1
[1] => 5
)
)
[_multiwidget] => 1
)
现在我需要创建一个所有类别的列表,其中 ID - 1
的类别和 ID - 5
的类别将显示为
<li class="cat-item cat-item-1"><span style="color:red;">New!</span> <a href="/blog/category/mycategory1" title="mycategory special offer"><b>My Category 1</b></a></li>
<li class="cat-item cat-item-3"><a href="/blog/category/mycategory2" title="mycategory special offer">My Category 2</a></li>
<li class="cat-item cat-item-5"><span style="color:red;">New!</span> <a href="/blog/category/mycategory3" title="mycategory special offer 3"><b>My Category 2</b></a></li>
出于某种原因,我无法使用
完成任何事情`wp_list_categories()` as it prints all categories out on the screen.
$widget_instances = get_option('widget_custom_categories_widget');
echo '<ul>';
foreach ( $categories as $category ) {
foreach ($widget_instances as $cat_key) {
foreach ($cat_key['categories'] as $key) {
if($category->term_id == $key){
printf('<li class="cat-item cat-item-%3$s"><span style="color: red;">New!</span> <a href="%1$s"><strong>%2$s</strong></a></li>',
esc_url(get_category_link($category->term_id)),
esc_html($category->name),
esc_html($category->term_id)
);
}else{
printf('<li class="cat-item cat-item-%3$s"><a href="%1$s">%2$s</a></li>',
esc_url(get_category_link($category->term_id)),
esc_html($category->name),
esc_html($category->term_id)
);
}
}
}
}
echo '<ul>';
我正在使用上面代码的图片,但现在我遇到了另一个问题,所有类别都打印了两次,一次有标签 "New!" 一次没有。
与嵌套的 foreach
语句有关,但无法弄清楚。
请提供任何帮助或建议
如果您的数组 $widget_instances
每次 returns 数组结构都按照您提供的方式构建,此技巧可能会对您有所帮助:
$cat_id = $widget_instances[2]['categories'];
echo '<ul>';
foreach ($categories as $category) {
if (in_array($category->term_id, $cat_id)) {
printf('<li class="cat-item cat-item-%3$s"><span style="color: red;">New!</span> <a href="%1$s"><strong>%2$s</strong></a></li>',
esc_url(get_category_link($category->term_id)),
esc_html($category->name),
esc_html($category->term_id)
);
} else {
printf('<li class="cat-item cat-item-%3$s"><a href="%1$s">%2$s</a></li>',
esc_url(get_category_link($category->term_id)),
esc_html($category->name),
esc_html($category->term_id)
);
}
}
echo '<ul>';