添加一个过滤器,在wordpress中为标记链接添加一个类

时间:2015-08-22 08:26:14

标签: php wordpress hook add-filter

我想添加一个过滤器来修改WP中get_the_tag_list生成的链接。它会调出get_the_term_list

function get_the_term_list( $id, $taxonomy, $before = '', $sep = '', $after = '' ) {
$terms = get_the_terms( $id, $taxonomy );

if ( is_wp_error( $terms ) )
    return $terms;

if ( empty( $terms ) )
    return false;

$links = array();

foreach ( $terms as $term ) {
    $link = get_term_link( $term, $taxonomy );
    if ( is_wp_error( $link ) ) {
        return $link;
    }
    $links[] = '<a href="' . esc_url( $link ) . '" rel="tag">' . $term->name . '</a>';
}

我想添加class="tag",但我不确定如何为我的functions.php文件编写过滤器,以仅定位该函数的$links[]位。我可以只是排除旧的链接集并以某种方式添加我修改过的链接集吗?

我正在考虑添加这样的东西,但我不知何故错了:

add_filter('get_the_term_list','replace_content');
function replace_content($links[])
{
    $links[] = str_replace('<a href="', '<a class="tag" href="', $links[]);
    return $links[];
}

1 个答案:

答案 0 :(得分:3)

你犯了几个错误。首先在get_the_term_list上添加过滤器不会起作用,因为它不是过滤器。如果您查看get_the_term_list的代码,您会看到这样的一行(取决于您的WP版本)

$term_links = apply_filters( "term_links-$taxonomy", $term_links );

因此,您可以在term_links-$taxonomy上添加过滤器,例如,分类标记。

您犯的第二个错误是str_replace与数组的组合。如果你想使用数组,你不需要在变量之后添加[]。这仅用于将=之后的部件分配给数组的下一个项目。在这种情况下,您在整个阵列上执行str_replace,因此在分配和$links中都应使用$links[]而不是str_replace,否则您将添加新数组(使用字符串替换)在当前数组的所有链接之后。

add_filter( "term_links-post_tag", 'add_tag_class');

function add_tag_class($links) {
    return str_replace('<a href="', '<a class="tag" href="', $links);
}