2016-04-09 9 views
0

Ich habe (eine Kopie natürlich) /wp-includes/widgets/class-wp-widget-categories.php bearbeitet, um es zu zwingen, den Inhalt meiner Gewohnheit zu zeigen Taxonomie durch nur eine einzige Zeile (# 59 wie für die ursprüngliche Datei von WP 4.2.2) am Ende von $ cat_args = array Zugabe() ;, so jetzt liest erÄndern der Standard WordPress 4.4.2 Kategorien Widget zum Anzeigen von benutzerdefinierten Taxonomien

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

Nichts wirklich schwierig an dieser Stelle , alles funktioniert wie beabsichtigt, während das neue Widget als Liste festgelegt wurde.

Alles wird sofort ruiniert, nachdem das neue Widget als Dropdown-Menü angezeigt wird, da alle Elemente der Dropdown-Liste auf nicht vorhandene URLs verweisen.

Wie meine Erfahrung Ebene (es ist weniger die Null in der Tat. Aber ich lerne!) Erlaubt es mir, um zu sehen, das Problem versteckt sich irgendwo in Zeile 62 des ursprünglichen Widget

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

wie diese exact string ist meiner Meinung nach verantwortlich für die Einstellung der Werte für Dropdown-Listenelemente nach JS, die bei Zeile 82 beginnt.

Ich bin in der Lage

?cat= 

mit

my_taxonomy/ 

in Zeile # 88, mich zu ersetzen, aber ich brauche den richtigen Wert in $ dropdown_id Variable zu setzen.

Und das ist das Problem für mich.

Kann jemand helfen?

Antwort

0

Da ich die Lösung selbst gefunden habe, werde ich derjenige sein, der meine eigene Frage beantworten wird, für den Fall, dass jemand das gleiche Problem haben könnte.

Es ist unmöglich zu den wp_dropdown_categories() zu zwingen, mit benutzerdefinierten Taxonomien zu arbeiten, ohne eine kleine Änderung an die Walker_CategoryDropdown Klasse zu machen, wegen seiner alten Bug oder Feature.

Also muss ich die Walker_CategoryDropdown-Klasse in /wp-includes/class-walker-page-dropdown.php ändern.

Um die ursprüngliche class-walker-page-dropdown.php zu erhalten, sollte ich den Inhalt in meine Plugin-Datei kopieren. Dann soll ich ersetzen

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

auf Zeile gefunden 48 mit

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

die modifizierte Klasse in der Lage zu machen, die Taxonomie Slug statt Kategorie ID zu bekommen und es in die <option> setzen ‚s value =“ " Begriff meines neuen Widgets.

Dann habe ich gelöschten Zeilen 1, 47 und 49 und ersetzt

class Walker_PageDropdown extends Walker { 

mit

class custom_walker_dropdown extends Walker_CategoryDropdown { 

diese Änderung als eine neue separate Klasse zu definieren.

Und schließlich habe ich die neue Klasse als Walker für wp_dropdown_categories() in meinem neuen Widget basierend auf WP nativen Kategorien Widget festgelegt.

Ich habe vermieden, die neue Klasse widget-wide zu setzen, da es den Listenteil des neuen Widgets ruinieren würde, so dass die custom_walker_dropdown Klasse als Walker nur für wp_dropdown_categories() eingestellt werden sollte.

Der letzte Schritt ist die Zeile 87 meiner modifizierten Kopie von /wp-includes/widgets/class-wp-widget-categories.php

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

mit

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

zu ersetzen arbeitet die JS verantwortlich für dieses Dropdown-Menü zu machen.

Bingo! Funktioniert alles.

Eigentlich gibt es Tonnen von benutzerdefinierten Walkers gefunden hier und da googeln, aber wie für mich der beste Weg ist, um die ursprüngliche Klasse zu nehmen und eine kleine Änderung zu machen.

+0

Ich habe in meiner ursprünglichen Frage angegeben, dass ich "? Cat =" durch "my_taxonomy /" ersetzen werde. Falscher Weg. Ich sollte '? Cat =' durch '? My_taxonomy =' ersetzen, um sicherzustellen, dass es keine Probleme gibt, wenn Permalinks ausgeschaltet sind. – YKKY

1

Frage ist sehr unklar. Wenn Sie jedoch auf die benutzerdefinierten Taxonomien zugreifen, bei denen es sich um Kategorien handelt, die diese Methode verwenden, wird dies nicht angezeigt. Die Vorgehensweise beim Anzeigen von benutzerdefinierten Taxonomien ist sehr unterschiedlich.

+0

Eigentlich funktioniert diese Methode absolut perfekt. Versuch es selber.) – YKKY

+0

Ich bin durch diese Phase gegangen. Der beste und effizienteste Weg besteht darin, benutzerdefinierte Taxonomien auf andere Weise zu verwenden. Sie sollten einige verschiedene Dateien verwenden müssen. –

+0

Warum sollte ich, wenn diese Methode in WP implementiert wird, funktioniert perfekt und braucht sehr wenig Aufwand zu erreichen? – YKKY

Verwandte Themen