WordPress归档小部件 - 自定义HTML输出

3

看来我仍然被WordPress困扰着。我在侧边栏中添加了小部件“存档”,但是HTML输出结果很糟糕,基本上有以下结构:

<li><a href="somelink">text</a> - (# of posts)</li>

我希望将其转化为:

<li><a href="somelink">text <small># of posts</small></a>

然而,与插件不同的是,在wordpress社区建议/提到的php页面中,如functions.php、widgets.php和default-widgets.php中,我无法找到创建html输出的行。

我已经使用了所有可能的关键字组合进行了搜索,但是没有找到相关的内容。

非常感谢您的帮助。

祝好

G.Campos

2个回答

2
请查看general-template.php文件。其中有两个函数:wp_get_archives和get_archives_link。您需要修改wp_get_archives函数中的$text变量,以更改加载的内容。文章计数将被加载到$after变量中,并在get_archives_link函数中链接之外放置。不要使用以下代码:
$text = sprintf(__('%1$s %2$d'), $wp_locale->get_month($arcresult->month), $arcresult->year);
if ( $show_post_count )
   $after = '&nbsp;('.$arcresult->posts.')' . $afterafter;

类似这样的:

$text = sprintf(__('%1$s %2$d'), $wp_locale->get_month($arcresult->month), $arcresult->year);
if ( $show_post_count )
   $text= $text.'&nbsp;<small>'.$arcresult->posts.'</small>';

这只是针对月度存档的内容。您需要修改年度、周度和日度块。

编辑:从链接标题中排除<small>元素的最简单方法是在每个块中将其加载到单独的变量中,然后将其传递给修改后的get_archives_link函数。在上面的示例中,在加载$text后立即将该值加载到$title中:

$text = sprintf(__('%1$s %2$d'), $wp_locale->get_month($arcresult->month), $arcresult->year);
$title = $text;
if ( $show_post_count )
   $text= $text.'&nbsp;<small>'.$arcresult->posts.'</small>';
$output .= get_archives_link($url, $text, $format, $before, $after, $title);

然后修改get_archives_link函数:
function get_archives_link($url, $text, $format = 'html', $before = '', $after = '', $title = '') {
    $text = wptexturize($text);

    if($title == '')
        $title = $text;

    $title_text = esc_attr($title);
    $url = esc_url($url);

    if ('link' == $format)
        $link_html = "\t<link rel='archives' title='$title_text' href='$url' />\n";
    elseif ('option' == $format)
        $link_html = "\t<option value='$url'>$before $text $after</option>\n";
    elseif ('html' == $format)
        $link_html = "\t<li>$before<a href='$url' title='$title_text'>$text</a>$after</li>\n";
    else // custom
        $link_html = "\t$before<a href='$url' title='$title_text'>$text</a>$after\n";

    $link_html = apply_filters( "get_archives_link", $link_html );

    return $link_html;
}

安德鲁,干得好。工作正常。但我有一个问题。 <a> 标签在其 title 属性中包含了 <small> 标签。换句话说,如果我将光标放在链接上,不仅会显示相关信息(例如“2011年2月-6篇文章”),还会出现混乱的 <small> 标签:“2011年2月-<small>6篇文章</small>”。如何删除 <a> 的 title="" 属性中提到的 <small> 标签? - Capagris
这个方案的唯一“巨大”问题在于需要hack核心部分。在更新时你将会失去所有的编辑内容。目前正在寻找过滤器钩子的解决方案(但看起来不太乐观)。我知道这是一个旧帖子,但如果我找到了什么东西,我会在这里分享。 - Zack Brady

1
在您的主题functions.php文件中添加以下代码,它将在span标记内包装文章归档计数。在下面的代码示例中,我将计数包装在span标记中,您可以根据需要添加或修改它。
function wrap_archive_count($links) {
       $links = str_replace('</a>&nbsp;(', '<span class="archive-count">', $links);
       $links = str_replace(')', '</span></a>', $links);
       return $links;
}
add_filter('get_archives_link', 'wrap_archive_count');

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接