2013-04-01 59 views
0

我搜索該答案的所有網頁。我使用wp_list_categories生成一個具有自定義分類的子菜單,它運行良好,並在瀏覽這些類別時使用current-cat。當我單身使用自定義分類時,在wp_list_categories上添加current_cat類

事情是,當我用這個菜單瀏覽單個帖子時,突出顯示不再有效。

對於該網站的博客部分,我用下面的代碼來突出顯示wp_list_categories()當前類別:

function sgr_show_current_cat_on_single($output) { 

global $post; 

if(is_single()) { 

$categories = wp_get_post_categories($post->ID); 

foreach($categories as $catid) { 
    $cat = get_category($catid); 
    if(preg_match('#cat-item-' . $cat->cat_ID . '#', $output)) { 
    $output = str_replace('cat-item-'.$cat->cat_ID, 'cat-item-'.$cat->cat_ID . ' current-cat', $output); 
    } 

} 

} 
return $output; 
} 

add_filter('wp_list_categories', 'sgr_show_current_cat_on_single'); 

但據我試過了,不能讓單一的職位的工作,按自定義分類法排序。 :/>我不知道如何定製它。

這有可能嗎?

回答

1

您需要使用get_the_terms($id, $taxonomy);而不是wp_get_post_categories();來獲取自定義分類術語ID。

您可以將分類標準名稱硬編碼到函數中,或從$args中獲取它,您將其傳入wp_list_categories($args);

最終代碼:

add_filter('wp_list_categories', 'sgr_show_current_cat_on_single', 10, 2); 

function sgr_show_current_cat_on_single($output, $args) { 

    if (is_single()) : 

    global $post; 

    $terms = get_the_terms($post->ID, $args['taxonomy']); 

    foreach($terms as $term) { 

     if (preg_match('#cat-item-' . $term ->term_id . '#', $output)) { 
     $output = str_replace('cat-item-'.$term ->term_id, 'cat-item-'.$term ->term_id . ' current-cat', $output); 
     } 

    } 

    endif; 

    return $output; 

} 
相關問題