добавить фильтр, чтобы добавить класс для ссылки тега в WordPress

Я хочу добавить фильтр для проверки ссылки, созданной get_the_tag_list в WP. Это вызывает 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[];
}

2

Решение

Вы сделали пару ошибок. Сначала добавьте фильтр на 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);
}
3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]