Wordpress中的自定义类别列表,包含本机列表类

时间:2018-01-18 16:43:13

标签: php wordpress widget categories

尝试在侧边栏中构建自定义类别列表,第一部分成功,但无法正确使用wordpress wp_list_categories()

基本上我的小部件会创建一个类别ID数组,标记为"新"

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>';

我正在使用上面代码的pice,但现在我有另一个问题,所有类别都打印两次,一次带标签&#34; New!&#34;一旦没有。

与嵌套的foreach语句有关,但无法弄明白。

请提供任何帮助或建议

1 个答案:

答案 0 :(得分:1)

如果你的数组$widget_instances每次都返回你提供的数组结构,那么这个技巧可能对你有所帮助:

$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>';