Zum Hauptinhalt springen
How can we help?
< Alle Themen
Drucken

Neues oMM-Plugin entwickeln

Übersicht

Diese Anleitung führt dich Schritt für Schritt durch die Erstellung eines neuen Plugins für die oMM-Sphäre.

Voraussetzungen

  • WordPress 6.0 oder höher
  • PHP 8.0 oder höher
  • Grundkenntnisse in PHP und WordPress-Entwicklung

Schritt 1: Verzeichnisstruktur anlegen

mkdir -p wp-content/plugins/omm-mein-plugin/includes/{Core,Admin,API,Frontend,Editor}
mkdir -p wp-content/plugins/omm-mein-plugin/{assets/css,assets/js,languages,templates}

Schritt 2: Haupt-Plugin-Datei erstellen

Erstelle omm-mein-plugin.php:

<?php
/**
 * Plugin Name: oMM Mein Plugin
 * Plugin URI: https://schulsozialarbeiter.de/plugins/mein-plugin
 * Description: Beschreibung deines Plugins
 * Version: 1.0.0
 * Author: Dein Name
 * License: GPL v2 or later
 * Text Domain: omm-mein-plugin
 * Requires Plugins: omm-core
 */

namespace OpenMindMesh\MeinPlugin;

if (!defined('ABSPATH')) {
    exit;
}

define('OMM_MEIN_PLUGIN_VERSION', '1.0.0');
define('OMM_MEIN_PLUGIN_PATH', plugin_dir_path(__FILE__));
define('OMM_MEIN_PLUGIN_URL', plugin_dir_url(__FILE__));

// PSR-4 Autoloader
spl_autoload_register(function ($class) {
    $prefix = 'OpenMindMesh\\MeinPlugin\\';
    $base_dir = OMM_MEIN_PLUGIN_PATH . 'includes/';
    
    $len = strlen($prefix);
    if (strncmp($prefix, $class, $len) !== 0) {
        return;
    }
    
    $relative_class = substr($class, $len);
    $file = $base_dir . str_replace('\\', '/', $relative_class) . '.php';
    
    if (file_exists($file)) {
        require $file;
    }
});

function init() {
    $plugin = new Core\Plugin();
    $plugin->init();
}
add_action('plugins_loaded', __NAMESPACE__ . '\\init');

register_activation_hook(__FILE__, function() {
    $installer = new Core\Installer();
    $installer->activate();
});

Schritt 3: Plugin-Klasse erstellen

Erstelle includes/Core/Plugin.php:

<?php
namespace OpenMindMesh\MeinPlugin\Core;

use OpenMindMesh\Core\BasePlugin;

class Plugin extends BasePlugin {
    
    private static ?Plugin $instance = null;
    
    public static function get_instance(): Plugin {
        if (self::$instance === null) {
            self::$instance = new self();
        }
        return self::$instance;
    }
    
    protected function get_slug(): string {
        return 'omm-mein-plugin';
    }
    
    protected function get_capabilities(): array {
        return ['mein-feature'];
    }
    
    protected function get_post_types(): array {
        return [
            'omm-mein-cpt' => [
                'labels' => [
                    'name' => __('Meine Einträge', 'omm-mein-plugin'),
                    'singular_name' => __('Mein Eintrag', 'omm-mein-plugin'),
                ],
                'public' => true,
                'show_in_rest' => true,
                'supports' => ['title', 'editor', 'thumbnail'],
            ],
        ];
    }
    
    public function init(): void {
        parent::init();
        $this->load_textdomain();
        
        if (is_admin()) {
            $this->init_admin();
        }
        $this->init_frontend();
    }
}

Schritt 4: Installer-Klasse erstellen

Erstelle includes/Core/Installer.php:

<?php
namespace OpenMindMesh\MeinPlugin\Core;

class Installer {
    
    public function activate(): void {
        $plugin = Plugin::get_instance();
        $plugin->register_post_types();
        flush_rewrite_rules();
        update_option('omm_mein_plugin_version', OMM_MEIN_PLUGIN_VERSION);
    }
    
    public function deactivate(): void {
        flush_rewrite_rules();
    }
}

Schritt 5: Admin-Settings erstellen

Erstelle includes/Admin/Settings.php mit WordPress Settings API.

Schritt 6: Shortcodes erstellen

Erstelle includes/Frontend/Shortcodes.php:

<?php
namespace OpenMindMesh\MeinPlugin\Frontend;

class Shortcodes {
    public function register(): void {
        add_shortcode('omm_mein_shortcode', [$this, 'render_shortcode']);
    }
    
    public function render_shortcode(array $atts): string {
        $atts = shortcode_atts(['id' => 0], $atts);
        ob_start();
        // Template laden
        return ob_get_clean();
    }
}

Nächste Schritte

  • Hooks und Filter nutzen
  • REST-API erweitern
  • Capability-System integrieren
  • Gutenberg-Blöcke erstellen
War dieser Artikel hilfreich?
0 out Of 5 Stars
5 Sterne 0%
4 Sterne 0%
3 Sterne 0%
2 Sterne 0%
1 Sterne 0%
5
Wie können wir diesen Artikel verbessern?
Wie können wir diesen Artikel verbessern?
Inhaltsverzeichnis