2010-08-28 54 views
0

我現在有一個網站與類別&子類別,其中每個項目被格式化爲一個硬編碼列表如下:WordPress的 - 迷茫,試圖用的add_filter定製wp_list_categories

<li class="cat-item open-access"><a href="/categories/open-access/">Open Access</a></li> 

重要的是,每個<li>項目被賦予一個類別,它與內部鏈接的類別的子彈相匹配。

我很明顯喜歡用Wordpress'wp_list_categories()來輸出列表而不是硬編碼它,但需要爲每個<li>項目保留自定義類。

我一直在尋找到過濾器和行動,並認爲,加入該到我的主題的functions.php文件我可能會拿出一個修復:

function add_class_from_slug($wp_list_categories) { 
     $pattern = '/class=\"/'; 
     $replacement = 'class="'.$category->slug.' '; 
     $newclass = preg_replace($pattern, $replacement, $wp_list_categories); 
     return $newclass; 
} 
add_filter('wp_list_categories','add_class_from_slug'); 

但是,這並不工作 - 通過$category->slug返回的文本在頁面呈現時退出。如果我在添加靜態文本(使用線像$replacement = 'class="myclass ';,它呈現的罰款。

無奈的是,我可以在正確的位置wp-includes/classes.php加入$class .= ' '.$category->slug; 得到我想要的輸出,但要避免訴諸這一點。

爲什麼我不能只使用$category->slug在我的功能?變通方法,建議,進一步閱讀關於這個問題的?要補充,我對PHP。感謝一個非常基本的抓地力!

回答

1

您可以擴展Walker_Category類的自己的類並覆蓋功能start_el()

如果您使用的類的名稱爲Walker_MyCategory,你可以調用wp_list_categories()這樣的:

wp_list_categories('walker=Walker_MyCategory') 

你也可以自己建立自己的列表。見get_categories()


哦,你的代碼沒有工作,因爲$ category沒有定義在任何地方。你需要確切知道它是什麼類別。

+0

謝謝。這是我現在所做的,它完美的作品。通過在我的主題的'functions.php'文件中擴展'Walker_Category'來覆蓋'start_el()',可以完全控制我的類別列出的方式。 如果有人發現這篇文章想要做類似的事情,我發現這兩篇文章對理解Wordpress的「Walker」類是什麼以及如何修改/擴展它非常有用: http://scribu.net /wordpress/extending-the-category-walker.html http://wordpress.org/support/topic/how-can-i-get-wp_list_pages-separated-by-commas – poisontofu 2010-08-30 06:38:36

+0

很高興聽到它爲你工作。 – Zahymaka 2010-08-30 21:50:29