19. Januar 2018
WordPress OOP Development – Teil 1
Die Entwicklung von Objekt Orientierten, gut strukturierten Themes und Plugins für WordPress verlangt einige Anpassungen am normalen Entwicklungsflow. In diesem Blogpost erkläre ich die Grundsätze der objekt orientierten Plugin und Theme Entwicklung. Dieser Artikel ist für Entwickler mit Erfahrungen in normalem OOP gedacht.
Hooks in OOP
Um eine Action oder einen Filter in WordPress zu registrieren, muss in WordPress der Hookname sowie eine Callback Funktion angegeben werden. Hier ein Beispiel aus der funktionalen Programmierung:
function prefix_enqueue_scripts_styles() {
wp_enqueue_style( 'global-styles', get_stylesheet_directory_uri() . '/css/style.min.css', array(), CHILD_THEME_VERSION );
}
add_action( 'wp_enqueue_scripts', 'prefix_enqueue_scripts_styles' );
In der funktionalen Programmierung muss man dabei vorsichtig bei der Benennung von Funktionen sein, da diese sonst mit einer anderen, gleichnamigen Funktion eine PHP-Fehlermeldung auslösen kann.
In OOP haben wir dieses Problem nicht, denn die Funktionen gehören alle zu einem Objekt. Damit diese mit ihrem Namen nicht kollidieren, gibt es sogenannte Namespaces (dazu mehr in einem neuen Beitrag).
Wollen wir nun diese sogenannten Callback Funkionen in einem Objekt angeben, haben wir einige Möglichkeiten dazu, je nachdem wie die Funktion definiert ist. Statische Funktionen müssen anders als Callback Funktion angegeben werden, als normale Methoden.
// Variante nicht-statisch
class Assets {
public function run() {
add_action( 'wp_enqueue_scripts', [$this, 'enqueue_scripts_styles'] );
}
public function enqueue_scripts_styles() {
wp_enqueue_style( 'global-styles', get_stylesheet_directory_uri() . '/css/style.min.css', array() );
}
}
// Variante statisch
class Assets {
public function run() {
add_action( 'wp_enqueue_scripts', [__CLASS__, 'enqueue_scripts_styles'] );
}
public static function enqueue_scripts_styles() {
wp_enqueue_style( 'global-styles', get_stylesheet_directory_uri() . '/css/style.min.css', array() );
}
}