包括链接列表类别作为css类

时间:2012-07-25 14:57:23

标签: php wordpress hyperlink categories

我想在我的wordpress链接列表中渲染一些额外的css类,特别是id将链接类别渲染为css类,例如:

link       : http://www.foobar.com/
gategories : friends, colleagues
name       : Foo Bar

当前呈现为:

<a href="http://www.foobar.com/" target="_blank">Foo Bar</a>

但我希望它呈现为:

<a href="http://www.foobar.com/" target="_blank" class="friends colleagues">Foo Bar</a>

我知道您使用以下函数来构建链接列表但我无法解决如何修改它以执行我需要的操作:

function wp_list_bookmarks($args = '') {
    $defaults = array(
        'orderby' => 'name', 'order' => 'ASC',
        'limit' => -1, 'category' => '', 'exclude_category' => '',
        'category_name' => '', 'hide_invisible' => 1,
        'show_updated' => 0, 'echo' => 1,
        'categorize' => 1, 'title_li' => __('Bookmarks'),
        'title_before' => '<h2>', 'title_after' => '</h2>',
        'category_orderby' => 'name', 'category_order' => 'ASC',
        'class' => 'linkcat', 'category_before' => '<li id="%id" class="%class">',
        'category_after' => '</li>'
    );

    $r = wp_parse_args( $args, $defaults );
    extract( $r, EXTR_SKIP );

    $output = '';

    if(1) {
        //output one single list using title_li for the title
        $bookmarks = get_bookmarks($r);

        if ( !empty($bookmarks) ) {
            if ( !empty( $title_li ) ){
                $output .= str_replace(array('%id', '%class'), array("linkcat-$category", $class), $category_before);
                $output .= "$title_before$title_li$title_after\n\t<ul class=\"xoxo blogroll $category\">\n";
                $output .= _walk_bookmarks($bookmarks, $r);
                $output .= "\n\t</ul>\n$category_after\n";
            } else {
                $output .= _walk_bookmarks($bookmarks, $r);
            }
        }
    }

    $output = apply_filters( 'wp_list_bookmarks', $output );

    if ( !$echo )
        return $output;
    echo $output;
}

?>

谢谢!

1 个答案:

答案 0 :(得分:1)

首先,您永远不应该修改Wordpress核心功能。然而,在书签的情况下,我并不真的责怪你想要的。他们有点痛苦。

我只是使用get_bookmarks()从头开始构建它。这是一个有效的例子:

foreach(get_bookmarks() as $bm)
{
    $terms = get_the_terms($bm->link_id, 'link_category');
    $classes = array('wp_link');

    if($terms)
    foreach($terms as $term)
        $classes[] = $term->slug;

    echo '<a class="'.implode(' ', $classes).'" href="'.$bm->link_url.'"'.($bm->link_target ? 'target="'.$bm->link_target.'"' : '').'>'.$bm->link_name.'</a><br/>';
}

只需将其放置在您要生成书签的模板中的任何位置即可。或者您可以将其包装在自定义函数调用中,并从模​​板中调用该函数。