0

我想在我的 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;
}

?>

谢谢!

4

1 回答 1

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

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

于 2012-07-28T02:20:07.177 回答