2016-04-09 4 views
0

Я редактировал (копия курса) /wp-includes/widgets/class-wp-widget-categories.php, чтобы заставить его показывать содержимое моего пользовательского интерфейса систематика, просто добавив одну строку (# 59, как и для исходного файла с WP 4.2.2) в конце $ cat_args = массив() ;, так что теперь он читаетИзменение стандартного виджета WordPress 4.4.2 для отображения пользовательских таксономий

$cat_args = array(
     'orderby'  => 'name', 
     'show_count' => $c, 
     'hierarchical' => $h, 
     'taxonomy'  => 'my_taxonomy' 
    ); 

ничего на самом деле трудно в данный момент , все работает по назначению, пока новый виджет установлен как список.

Все руины сразу же после установки нового виджета в качестве раскрывающегося меню, поскольку все элементы раскрывающегося списка указывают на неиспользуемые URL-адреса.

Как мой уровень опыта (меньше нуля на самом деле. Но я учусь!) Позволяет мне видеть, что проблема скрывается где-то в строке # 62 оригинального виджета

$dropdown_id = ($first_dropdown) ? 'cat' : "{$this->id_base}-dropdown-{$this->number}"; 

как это точную строку, на мой взгляд, ответственную за установку значений для выпадающих списков в соответствии с JS, которая начинается в строке # 82.

Я могу заменить

?cat= 

с

my_taxonomy/ 

в строке # 88 сам, но мне нужно поставить правильное значение в переменную $ dropdown_id.

И это проблема для меня.

Может ли кто-нибудь помочь?

ответ

0

Как я сам нашел решение, я буду тем, кто ответит на мой собственный вопрос, на всякий случай, если кто-то может столкнуться с той же проблемой.

Это невозможно заставить wp_dropdown_categories() работать с пользовательскими таксономиями без небольшой модификации в Walker_CategoryDropdown класса, из-за свою древнюю ошибку или функцию.

Поэтому мне нужно изменить класс Walker_CategoryDropdown, найденный в /wp-includes/class-walker-page-dropdown.php.

Чтобы сохранить исходный класс-walker-page-dropdown.php, я должен скопировать его содержимое в мой файл плагина. Тогда я должен заменить

$args['value_field'] = 'ID'; 

найденных по строке 48 с

$args['value_field'] = 'slug'; 

, чтобы модифицированный класс смог получить таксономию слизняк вместо категории ID и поместить его в значение <option> «s =» " срок моего нового виджета.

Затем я удалил строки 1, 47 и 49 и заменить

class Walker_PageDropdown extends Walker { 

с

class custom_walker_dropdown extends Walker_CategoryDropdown { 

определить эту модификацию в качестве нового отдельного класса.

И наконец, я установил новый класс как Walker для wp_dropdown_categories() в своем новом виджетах на основе виджета категорий WP.

Я избегал установки виджета нового класса, так как это разрушит часть списка нового виджета, поэтому класс custom_walker_dropdown должен быть установлен как ходовик только для wp_dropdown_categories().

Заключительный шаг должен заменить строку 87 из моей модифицированной копии из /wp-includes/widgets/class-wp-widget-categories.php

if (dropdown.options[ dropdown.selectedIndex ].value > 0) { 

с

if (dropdown.options[ dropdown.selectedIndex ].value !== 0) { 

сделать JS ответственность за это выпадающее меню работает.

Bingo! Все работает.

На самом деле есть тонны пользовательских ходоков, найденных в Google и здесь, но для меня лучший способ - взять оригинальный класс и внести небольшую модификацию.

+0

В моем первоначальном вопросе я сказал, что я собираюсь заменить '? Cat =' на 'my_taxonomy /'. Неправильный способ. Я должен заменить '? Cat =' на '? My_taxonomy =', чтобы не было никаких проблем, если постоянные ссылки отключены. – YKKY

1

Вопрос очень неясен. Но если вы получаете доступ к пользовательским таксономии, которые являются категориями, используя этот метод, то он не будет показан. Процедура отображения пользовательских таксономий намного отличается.

+0

На самом деле этот метод работает абсолютно идеально. Попробуй сам.) – YKKY

+0

Я прошел этот этап. Лучший и эффективный способ - использовать для пользовательских таксономий по-другому. Вам нужно будет использовать несколько разных файлов. –

+0

Почему я должен, если этот метод реализован в WP, отлично работает и требует очень мало усилий для достижения? – YKKY

Смежные вопросы