添加一个过滤器来添加一个类来标记 wordpress 中的链接

ant*_*ton 2 php wordpress hook add-filter

我想添加一个过滤器来修改get_the_tag_listWP 中生成的链接。它调用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>';
}
Run Code Online (Sandbox Code Playgroud)

我想添加,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[];
}
Run Code Online (Sandbox Code Playgroud)

Tee*_*Jee 5

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

$term_links = apply_filters( "term_links-$taxonomy", $term_links );
Run Code Online (Sandbox Code Playgroud)

因此,您可以term_links-$taxonomy在分类法标记的情况下添加过滤器。

您犯的第二个错误是str_replace与数组结合使用。如果要使用数组,则无需在变量后添加 []。这仅用于将 之后的部分分配给=数组的下一项。在这种情况下,您str_replace对整个数组执行 a ,因此您应该在分配中使用$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);
}
Run Code Online (Sandbox Code Playgroud)