Wordpress - запутался, пытаясь использовать add_filter для настройки wp_list_categories - PullRequest
1 голос
/ 28 августа 2010

В настоящее время у меня есть сайт с жестко заданным списком категорий и подкатегорий, где каждый элемент имеет следующий формат:

<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 ';, он будет хорошо выглядеть.

К сожалению, я могу получить желаемый результат, добавив $class .= ' '.$category->slug; в нужном месте wp-includes/classes.php, но не стоит прибегать к этому.

Почему я не могу просто использовать $category->slug в своей функции? Обходные пути, предложения, дальнейшее чтение по теме? Должен добавить, что у меня довольно простое владение PHP. Спасибо!

1 Ответ

1 голос
/ 29 августа 2010

Вы можете расширить класс Walker_Category своим собственным классом и переопределить функцию start_el().

Если имя используемого вами класса Walker_MyCategory, вы можете позвонить wp_list_categories() как:

wp_list_categories('walker=Walker_MyCategory')

Вы также можете сами составить свой список. Смотрите get_categories ()


Да, и ваш код не работает, потому что $ category нигде не определена. Вы должны точно знать, что это за категория.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...