Hallo in die Runde,
mein erster Post, nach erstmaligem Kontakt zu WP vor 10 Tagen. PHP ist mir nicht fremd. Ich habe Jahre an und um TYPO3 gearbeitet, kenne ZF, OOP und Derivate sowie auch die verschiedensten Templating Engines. WP erscheint mir bestens dokumentiert und ich hatte keinerlei Probleme, meine WP Entwicklungssite aufzusetzen.
Mein erstes Projekt ist ein Theme auf Basis Bootstrap 3.x.x. Gibt's schon 100fach, aber ich will Verständnis, und es deshalb selber machen. Alles klappt wie es soll. Responsive Navbar, 2-3 andere Navigationselemente, die Inhaltsbereiche, die Seiten, alles funktioniert wunderbar mit Bootstrap, inklusive responsive media. Mit einer gravierenden Ausnahme. Den Widgets.
Im Quellcode erkennt man, dass der Markup statisch "verdrahtet" ist. Der ul-Tag im Kategorien-Widget hat keine Klasse, und es gibt auch keine Bordmittel-Methode, ihm eine zu spendieren. Erkennt man auch an allen aufgefundenen anderen Bootstrap Themes, die an gleicher Stelle "gescheitert" sind.
Jetzt sehe ich mehrere Ansätze, das Problem zu lösen:
- Per css, indem man die WP Widget Klassen in seine Bootstrap Less Files aufnimmt (und somit dupliziert, und aufbläht). Gefällt mir nicht wirklich, denn unnötige Redundanz führt mittelfristig immer zu Ärger. Mein Theme soll Bootstrap nach Bedarf auch neu kompilieren, und in style.css möchte ich ab Werk nur leere Klassen, zum individuellen Styling durch die Nutzer.
- Per Javascript die Klassen tauschen: Kein Problem, ist aber übelster Bastelkram. Kommt nicht in Frage.
- Klassentausch per PHP. Gesamten Sidebar mittels output Buffering in Variable einlesen, und Klassen austauschen. Technisch kein Problem, fühlt sich aber falsch an (und hebelt ggf. das Caching aus???).
- Widgets mit geändertem Markup (i.e. einer zugefügten Klasse) im Theme duplizieren (class MyBootstrap_Widget_Recent_Posts extends WP_Widget_Recent_Posts). Gigantischer Overkill, nur um eine popelige Klasse hinzuzufügen.
- Navigationsartige Widgets (Categories, Archive, Latest Posts...) durch Custom-Menues ersetzen und im BE als Widget ausblenden.
Vielleicht habe ich ja eine Möglichkeit übersehen? Gangbar sind alle Wege. Der am wenigsten falsch wirkende wäre Nr. 5, der flexibelste Nr. 3 (vorausgesetzt, er hat keinen zu großen Performancenachteil). Wie wären Eure Gedanken zu dieser Problematik?
Bin dankbar für jeden Input.
Grüße,
Thomas