✅ WEB- und WordPress-Nachrichten, Themen, Plugins. Hier teilen wir Tipps und beste Website-Lösungen.

WordPress-Widgets: Refactoring, Teil 2

16

Nach all den vorläufigen Inhalten sind wir endlich an einem Punkt angelangt, an dem wir bereit sind, mit der Lösung der Codierungsstandardprobleme zu beginnen, die von unserer IDE und unseren Codequalitätstools ausgelöst werden.

Dabei werde ich den Inhalt in zwei Beiträge aufteilen:

  • Der erste Beitrag konzentriert sich ausschließlich auf das Refactoring des vorhandenen Codes.
  • Im nächsten Beitrag werden wir uns mit dem Refactoring der Struktur des Plugins befassen, um die Organisation und Architektur zu verbessern.

Lassen Sie uns zunächst einen Blick auf die Fehler werfen, die der Code-Sniffer auslöst, und sehen, ob wir ihn nicht auf modernere Standards bringen können.

Das WordPress-Widget Boilerplate: Refactoring, Teil 2

Beachten Sie, dass ich mich immer noch im Entwicklungszweig befinde, da wir noch nicht bereit sind, dies mit dem Master zusammenzuführen. Und wenn Sie Ihre Code-Sniffer und andere Tools richtig eingerichtet haben, sollten Sie Folgendes sehen:

Warning: Uncaught ErrorException: require_once(/Users/tommcfarlin/Dropbox/Projects/trunk/wp-content/plugins/WordPress-Widget-Boilerplate/vendor/bin/vendor/autoload.php): failed to open stream: No such file or directory in /Users/tommcfarlin/Dropbox/Projects/trunk/wp-content/plugins/WordPress-Widget-Boilerplate/vendor/bin/php-cs-fixer:62 Stack trace: #0 /Users/tommcfarlin/Dropbox/Projects/trunk/wp-content/plugins/WordPress-Widget-Boilerplate/vendor/bin/php-cs-fixer(62): {closure}(2, 'require_once(/U...', '/Users/tommcfar...', 62, Array) #1 /Users/tommcfarlin/Dropbox/Projects/trunk/wp-content/plugins/WordPress-Widget-Boilerplate/vendor/bin/php-cs-fixer(62): require_once() #2 {main} thrown in /Users/tommcfarlin/Dropbox/Projects/trunk/wp-content/plugins/WordPress-Widget-Boilerplate/vendor/bin/php-cs-fixer on line 62 Call Stack: 0.0041 365448 1. {main}() /Users/tommcfarlin/Dropbox/Projects/trunk/wp-content/plugins/WordPress-Widget-Boilerplate/vendor/bin/php-cs-fixer:0 Fatal error: main(): Failed opening required '/Users/tommcfarlin/Dropbox/Projects/trunk/wp-content/plugins/WordPress-Widget-Boilerplate/vendor/bin/vendor/autoload.php' (include_path='.:/usr/local/Cellar/php@7.1/7.1.19/share/php@7.1/pear') in /Users/tommcfarlin/Dropbox/Projects/trunk/wp-content/plugins/WordPress-Widget-Boilerplate/vendor/bin/php-cs-fixer on line 62 Call Stack: 0.0041 365448 1. {main}() /Users/tommcfarlin/Dropbox/Projects/trunk/wp-content/plugins/WordPress-Widget-Boilerplate/vendor/bin/php-cs-fixer:0 You can fix all errors by running following commands: '/Users/tommcfarlin/Dropbox/Projects/trunk/wp-content/plugins/WordPress-Widget-Boilerplate/vendor/bin/php-cs-fixer' '--allow-risky=yes' '--config=.php_cs.dist' '--using-cache=yes' '--verbose' 'fix' ERROR: Ruleset /Users/tommcfarlin/Dropbox/Projects/trunk/wp-content/plugins/WordPress-Widget-Boilerplate/phpcs.xml is not valid Run "phpcs --help" for usage information Warning: require(/Users/tommcfarlin/Dropbox/Projects/trunk/wp-content/plugins/WordPress-Widget-Boilerplate/vendor/bin/parallel-lint.php): failed to open stream: No such file or directory in /Users/tommcfarlin/Dropbox/Projects/trunk/wp-content/plugins/WordPress-Widget-Boilerplate/vendor/bin/parallel-lint on line 4 Call Stack: 0.0035 352864 1. {main}() /Users/tommcfarlin/Dropbox/Projects/trunk/wp-content/plugins/WordPress-Widget-Boilerplate/vendor/bin/parallel-lint:0 Fatal error: require(): Failed opening required '/Users/tommcfarlin/Dropbox/Projects/trunk/wp-content/plugins/WordPress-Widget-Boilerplate/vendor/bin/parallel-lint.php' (include_path='.:/usr/local/Cellar/php@7.1/7.1.19/share/php@7.1/pear') in /Users/tommcfarlin/Dropbox/Projects/trunk/wp-content/plugins/WordPress-Widget-Boilerplate/vendor/bin/parallel-lint on line 4 Call Stack: 0.0035 352864 1. {main}() /Users/tommcfarlin/Dropbox/Projects/trunk/wp-content/plugins/WordPress-Widget-Boilerplate/vendor/bin/parallel-lint:0 PHP Warning: require(/Users/tommcfarlin/Dropbox/Projects/trunk/wp-content/plugins/WordPress-Widget-Boilerplate/vendor/bin/parallel-lint.php): failed to open stream: No such file or directory in /Users/tommcfarlin/Dropbox/Projects/trunk/wp-content/plugins/WordPress-Widget-Boilerplate/vendor/bin/parallel-lint on line 4 PHP Stack trace: PHP 1. {main}() /Users/tommcfarlin/Dropbox/Projects/trunk/wp-content/plugins/WordPress-Widget-Boilerplate/vendor/bin/parallel-lint:0 PHP Fatal error: require(): Failed opening required '/Users/tommcfarlin/Dropbox/Projects/trunk/wp-content/plugins/WordPress-Widget-Boilerplate/vendor/bin/parallel-lint.php' (include_path='.:/usr/local/Cellar/php@7.1/7.1.19/share/php@7.1/pear') in /Users/tommcfarlin/Dropbox/Projects/trunk/wp-content/plugins/WordPress-Widget-Boilerplate/vendor/bin/parallel-lint on line 4 PHP Stack trace: PHP 1. {main}() /Users/tommcfarlin/Dropbox/Projects/trunk/wp-content/plugins/WordPress-Widget-Boilerplate/vendor/bin/parallel-lint:0 /Users/tommcfarlin/Dropbox/Projects/trunk/wp-content/plugins/WordPress-Widget-Boilerplate/src/Plugin.php:33 The class Widget_Name has 12 public methods. Consider refactoring Widget_Name to keep number of public methods under 10. /Users/tommcfarlin/Dropbox/Projects/trunk/wp-content/plugins/WordPress-Widget-Boilerplate/src/Plugin.php:33 The class Widget_Name is not named in CamelCase. /Users/tommcfarlin/Dropbox/Projects/trunk/wp-content/plugins/WordPress-Widget-Boilerplate/src/Plugin.php:33 The property$widget_slug is not named in camelCase. /Users/tommcfarlin/Dropbox/Projects/trunk/wp-content/plugins/WordPress-Widget-Boilerplate/src/Plugin.php:97 The method get_widget_slug is not named in camelCase. /Users/tommcfarlin/Dropbox/Projects/trunk/wp-content/plugins/WordPress-Widget-Boilerplate/src/Plugin.php:111 The variable$widget_string is not named in camelCase. /Users/tommcfarlin/Dropbox/Projects/trunk/wp-content/plugins/WordPress-Widget-Boilerplate/src/Plugin.php:111 The variable$before_widget is not named in camelCase. /Users/tommcfarlin/Dropbox/Projects/trunk/wp-content/plugins/WordPress-Widget-Boilerplate/src/Plugin.php:111 The variable$widget_string is not named in camelCase. /Users/tommcfarlin/Dropbox/Projects/trunk/wp-content/plugins/WordPress-Widget-Boilerplate/src/Plugin.php:111 The variable$widget_string is not named in camelCase. /Users/tommcfarlin/Dropbox/Projects/trunk/wp-content/plugins/WordPress-Widget-Boilerplate/src/Plugin.php:111 The variable$after_widget is not named in camelCase. /Users/tommcfarlin/Dropbox/Projects/trunk/wp-content/plugins/WordPress-Widget-Boilerplate/src/Plugin.php:111 The variable$widget_string is not named in camelCase. /Users/tommcfarlin/Dropbox/Projects/trunk/wp-content/plugins/WordPress-Widget-Boilerplate/src/Plugin.php:111 The variable$widget_string is not named in camelCase. /Users/tommcfarlin/Dropbox/Projects/trunk/wp-content/plugins/WordPress-Widget-Boilerplate/src/Plugin.php:111 Avoid unusedparameters such as '$instance'. /Users/tommcfarlin/Dropbox/Projects/trunk/wp-content/plugins/WordPress-Widget-Boilerplate/src/Plugin.php:131 Avoid unusedlocal variables such as '$before_widget'. /Users/tommcfarlin/Dropbox/Projects/trunk/wp-content/plugins/WordPress-Widget-Boilerplate/src/Plugin.php:137 Avoid unusedlocal variables such as '$after_widget'. /Users/tommcfarlin/Dropbox/Projects/trunk/wp-content/plugins/WordPress-Widget-Boilerplate/src/Plugin.php:149 The method flush_widget_cache is not named in camelCase. /Users/tommcfarlin/Dropbox/Projects/trunk/wp-content/plugins/WordPress-Widget-Boilerplate/src/Plugin.php:159 The parameter $new_instance is not named in camelCase. /Users/tommcfarlin/Dropbox/Projects/trunk/wp-content/plugins/WordPress-Widget-Boilerplate/src/Plugin.php:159 The parameter $old_instance is not named in camelCase. /Users/tommcfarlin/Dropbox/Projects/trunk/wp-content/plugins/WordPress-Widget-Boilerplate/src/Plugin.php:159 The variable$old_instance is not named in camelCase. /Users/tommcfarlin/Dropbox/Projects/trunk/wp-content/plugins/WordPress-Widget-Boilerplate/src/Plugin.php:159 Avoid unusedparameters such as '$new_instance'. /Users/tommcfarlin/Dropbox/Projects/trunk/wp-content/plugins/WordPress-Widget-Boilerplate/src/Plugin.php:195 The method widget_textdomain is not named in camelCase. /Users/tommcfarlin/Dropbox/Projects/trunk/wp-content/plugins/WordPress-Widget-Boilerplate/src/Plugin.php:207 The parameter $network_wide is not named in camelCase. /Users/tommcfarlin/Dropbox/Projects/trunk/wp-content/plugins/WordPress-Widget-Boilerplate/src/Plugin.php:207 Avoid unusedparameters such as '$network_wide'. /Users/tommcfarlin/Dropbox/Projects/trunk/wp-content/plugins/WordPress-Widget-Boilerplate/src/Plugin.php:216 The parameter $network_wide is not named in camelCase. /Users/tommcfarlin/Dropbox/Projects/trunk/wp-content/plugins/WordPress-Widget-Boilerplate/src/Plugin.php:216 Avoid unusedparameters such as '$network_wide'. /Users/tommcfarlin/Dropbox/Projects/trunk/wp-content/plugins/WordPress-Widget-Boilerplate/src/Plugin.php:223 The method register_admin_styles is not named in camelCase. /Users/tommcfarlin/Dropbox/Projects/trunk/wp-content/plugins/WordPress-Widget-Boilerplate/src/Plugin.php:232 The method register_admin_scripts is not named in camelCase. /Users/tommcfarlin/Dropbox/Projects/trunk/wp-content/plugins/WordPress-Widget-Boilerplate/src/Plugin.php:241 The method register_widget_styles is not named in camelCase. /Users/tommcfarlin/Dropbox/Projects/trunk/wp-content/plugins/WordPress-Widget-Boilerplate/src/Plugin.php:250 The method register_widget_scripts is not named in camelCase. [FATAL] /Users/tommcfarlin/Dropbox/Projects/trunk/wp-content/plugins/WordPress-Widget-Boilerplate/phpcs.xml: Premature end of data in tag ruleset line 2 (77) on line 28,12

Und Sie sollten nach dem Laufen zumindest all dies sehen:

$ vendor/bin/grumphp run

Bevor wir fortfahren, müssen wir einige geringfügige Änderungen an der Organisation der Dateien vornehmen. Das heißt, wir müssen die Kern-Plugin-Datei (die wir als Plugin.php haben) in zwei Dateien aufteilen.

Insbesondere benötigen wir eine Plugin-Bootstrap-Datei, und dann müssen wir die Kern-Plugin-Datei verwalten. Lassen Sie uns also zuerst einen Plugin-Bootstrap erstellen.

Erstellen Sie den Bootstrap

Erstellen Sie im Stammverzeichnis des Plugins eine Datei mit dem Namen wordpress-widget-boilerplate.php. Fügen Sie dann Folgendes hinzu :

Hinweis in der Datei oben; Wir haben den Plugin-Header, die Bedingung, um festzustellen, ob auf die Datei zugegriffen werden kann, und laden dann den Composer-Autoloader.

Bearbeiten Sie das Core-Plugin

Sobald dies erledigt ist, wird die Kerndatei Plugin.php so geändert, dass sie wie folgt aussieht :

Denken Sie daran, dass wir noch viel zu tun haben, aber als erstes müssen wir damit beginnen, die Codebasis von ihrem aktuellen Zustand zu bereinigen. Letztendlich werden wir dies in eine viel objektorientiertere Weise umgestalten, aber wir müssen die aktuelle Version des Plugins in einen gesunden Zustand bringen.

Jetzt können wir unsere Aufmerksamkeit jedoch wieder auf die ursprüngliche Ausgabe von GrumPHP richten. Wenn Sie durchsehen, sehen Sie in der Ausgabe eine Zeile wie diese:

You can fix all errors by running following commands: '/Users/tommcfarlin/Dropbox/Projects/trunk/wp-content/plugins/WordPress-Widget-Boilerplate/vendor/bin/php-cs-fixer' '--allow-risky=yes' '--config=.php_cs.dist' '--using-cache=yes' '--verbose' 'fix'

Sehen wir uns an dieser Stelle an, wie wir den empfohlenen Befehl ausführen und sehen, was passiert. Geben Sie dies insbesondere in Ihr Terminal ein:

'/Users/tommcfarlin/Dropbox/Projects/trunk/wp-content/plugins/WordPress-Widget-Boilerplate/vendor/bin/php-cs-fixer' '--allow-risky=yes' '--config=.php_cs.dist' '--using-cache=yes' '--verbose' 'fix'

Angenommen, alle Dinge funktionieren korrekt, dann sollten Sie so etwas sehen:

Ein Hinweis zu Ausgabefehlern

Wenn Sie dabei eine Fehlermeldung erhalten, müssen Sie möglicherweise das Herstellerverzeichnis aktualisieren oder sogar das Verzeichnis aktualisieren. Wenn dies der Fall ist, versuchen Sie zunächst Folgendes:

$ composer update

Und wenn das Ihr Problem nicht löst, versuchen Sie Folgendes:

$ rm -rf vendor $ composer update

Führen Sie danach den Befehl erneut aus.

Zurück zur Ausgabe

Sie sollten dann eine Ausgabe wie diese sehen:

WordPress-Widgets: Refactoring, Teil 2

Führen Sie als Nächstes den folgenden Befehl auf Ihrem Terminal aus:

$ vendor/grumphp/run

Hier sollten Sie nun Probleme mit den Codierungsstandards sehen. Die Liste ist zu lang, um sie hier aufzulisten, aber Sie sollten eine Option sehen, um so etwas zu tun :

---------------------------------------------------------------------- FOUND 9 ERRORS AFFECTING 8 LINES ----------------------------------------------------------------------

Und an diesem Punkt gibt es viele Änderungen, die wir vornehmen müssen, wenn wir es auf PSR2-Standards bringen wollen. Also machen wir das jetzt.

Refactoring der Widget-Boilerplate

Angenommen, Sie haben alle erforderlichen Erweiterungen und Plug-ins in Visual Studio Code installiert, dann sehen Sie wahrscheinlich ziemlich viel Rot in Ihrer IDE.

WordPress-Widgets: Refactoring, Teil 2

Das sind alles Probleme, die behoben werden müssen. Also werde ich durchgehen und den Code aktualisieren. Dann teile ich den Code hier (aus Platzgründen ohne Kommentare).

Angenommen, Sie haben alle richtigen Änderungen vorgenommen, sollten Sie so etwas haben:

Führen Sie noch einmal aus:

$ vendor/bin/grumphp run

Und sehen Sie, welche Ausgabe Sie erhalten. Sie erhalten immer noch eine Vielzahl von Fehlern, die etwas zum Ton von sagen:

Vermeiden Sie ungenutzte lokale Variablen wie …

Dies liegt daran, dass die Code-Sniffing-Regeln nicht wollen, dass wir Variablen verwenden, die nicht verwendet werden. In einem Boilerplate werden wir diese Variablen jedoch wahrscheinlich vor dem Ende des Projekts verwenden.

Zu diesem Zweck müssen Sie sich an dieser Stelle also keine Sorgen machen. Wir kümmern uns, wenn es soweit ist.

Bis PSR

Zu diesem Zeitpunkt wurde ein Großteil des Plugins auf PSR-Standards aufgekauft und verfügt über eine solide Reihe von Tools, mit denen wir unseren Code während des Schreibens konsequent testen können.

Wenn Sie dem Repository folgen, wurde der Entwicklungszweig aktualisiert, um die Änderungen in diesem Beitrag widerzuspiegeln, also zögern Sie nicht, ihn zu ziehen und den Code zu überprüfen.

Im nächsten Beitrag werden wir damit beginnen, den Code viel objektorientierter umzugestalten.

Aufnahmequelle: tommcfarlin.com

Diese Website verwendet Cookies, um Ihre Erfahrung zu verbessern. Wir gehen davon aus, dass Sie damit einverstanden sind, Sie können sich jedoch abmelden, wenn Sie möchten. Annehmen Weiterlesen