2015-08-22 168 views
2

標記鏈接我要添加過濾器來修改在WP get_the_tag_list生成的鏈接。它調用了get_the_term_list添加過濾器添加類在WordPress

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[]; 
} 
+0

你使用哪種版本的WordPress的?這僅僅是爲了'標籤'分類嗎? – TeeDeJee

+0

其版本4.3 – antonanton

回答

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); 
} 
+0

感謝您的解釋! 我有這個在我的版本: '$ term_links = apply_filters( 「term_links- $分類學」,$鏈接);'。 並回答你的其他問題,只有它的標籤。我使用這些標籤作爲人名,所以我想爲這些類添加一個'no-wrap'類,以便在這些類中不會打破名稱。想你的版本,但我似乎並沒有注意到它沒收$聯繫掛鉤作爲類不適用 – antonanton

+0

@antonanton我的錯誤,它應該是term_links-post_tag代替term_links標籤。看我的編輯。 – TeeDeJee

+0

thx @TeeDeJee,工作正常。比我想象的要簡單得多 – antonanton