【问题标题】:Wordpress — confused, trying to use add_filter to customise wp_list_categoriesWordpress — 困惑,尝试使用 add_filter 自定义 wp_list_categories
【发布时间】:2011-04-05 05:06:57
【问题描述】:

我目前有一个包含硬编码类别和子类别列表的网站,其中每个项目的格式如下:

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

重要的是,每个 &lt;li&gt; 项目都被分配了一个与链接到其中的类别的 slug 匹配的类。

我显然想使用 Wordpress 的 wp_list_categories() 来输出列表而不是硬编码,但需要为每个 &lt;li&gt; 项目保留自定义类。

我一直在研究过滤器和操作,并认为可以通过将其添加到我的主题的 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-&gt;slug 返回的文本会丢失。如果我添加静态文本(使用像$replacement = 'class="myclass '; 这样的行,它会呈现良好。

令人沮丧的是,我可以通过添加$class .= ' '.$category-&gt;slug; 来获得我想要的输出 在正确的位置wp-includes/classes.php,但希望避免诉诸于此。

为什么我不能在我的函数中使用$category-&gt;slug?解决方法,建议,关于该主题的进一步阅读?应该补充一点,我对 PHP 有相当基本的了解。谢谢!

【问题讨论】:

    标签: php wordpress wordpress-theming


    【解决方案1】:

    您可以使用自己的类扩展Walker_Category 类并覆盖函数start_el()

    如果你使用的类名是Walker_MyCategory,你可以调用wp_list_categories(),比如:

    wp_list_categories('walker=Walker_MyCategory')
    

    您也可以自己建立自己的列表。见get_categories()


    哦,您的代码不起作用,因为 $category 没有在任何地方定义。您需要确切地知道它是什么类别。

    【讨论】:

    • 谢谢。这就是我现在所做的,并且效果很好。通过在我的主题的functions.php 文件中扩展Walker_Category 来覆盖start_el(),可以完全控制我的类别的列出方式。如果有人看到这篇文章想做类似的事情,我发现这两篇文章对于理解 Wordpress 的 Walker 类是什么以及如何修改/扩展它非常有用:scribu.net/wordpress/extending-the-category-walker.htmlwordpress.org/support/topic/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多