it-swarm.com.de

Wie mache ich ein Theme "plugin-ready"?

Wie überarbeite ich ein Thema, damit ich meine Ereignis-Hooks veröffentlichen und jeder ein Plugin erstellen kann, um meinem Thema auf einfache Weise neue Funktionen hinzuzufügen?

4
Volomike

Nachdem ich an mehreren so großen Projekten gearbeitet hatte, dass ich nicht alle Beteiligten kannte, kam ich zu dem Schluss:

Einfach halten, gute Dokumentation schreiben.

Code ist einfach, wenn er leicht zu lesen, zu lernen und zu erweitern ist.

Das Rad nicht neu erfinden: Verwenden Sie die angegebenen Haken, wo immer dies möglich ist, und fügen Sie neue nach einem vorhersehbaren Schema hinzu.

Ein sehr einfaches Beispiel:

if ( ! is_singular() && is_active_sidebar( 't5-archive-sidebar' ) )
{
    do_action( 'sidebar_before' );
    print '<ul id="sidebar">';
    dynamic_sidebar( 't5-archive-sidebar' );
    print '</ul>';
    do_action( 'sidebar_after' );
}

Anhand des Attributs id kann jeder die Hooks vorhersagen, da die Namen immer gleich sind. Sie wissen bereits, wie die Hooks für <div id="header"> und <div id="content"> benannt werden. Es gibt ein interessantes Trac-Ticket , das Sie lesen sollten und das Theme Hook Alliance @Otto in seiner Antwort empfohlen.

Registrieren Sie alle Rückrufe für Ihre Hooks an einem Ort: dem Beginn des functions.php. Wenn alles an einen Hook gebunden ist, brauchen Sie function_exists() nicht, da ein Plugin oder ein untergeordnetes Thema Ihre Funktion einfach abmelden und stattdessen eine eigene Funktion verwenden kann.

Beispiel:

add_action( 'content_before',       't5_frontpage_widget' );
add_action( 'footer_before',        't5_loop_navigation' );
add_action( 'header_before',        't5_skiplink', 1, 0 );
add_filter( 'the_title',            't5_fill_empty_title', 20, 1 );
add_action( 'wp_loaded',            't5_post_format_support' );
add_action( 'wp_loaded',            't5_load_theme_language' );
add_action( 'wp_loaded',            't5_setup_custom_background' );
add_action( 'wp_loaded',            't5_setup_custom_header' );
add_action( 'wp_loaded',            't5_setup_sidebars' );
add_filter( 'wp_title',             't5_wp_title_filter', 20, 2 );

Schließen Sie zusätzliche Dateien so spät wie möglich ein, erleichtern Sie das Ersetzen dieser Dateien und verwenden Sie eine Datei pro Klasse.

Verwenden Sie PHPDoc für alle Funktionen und Klassen. Fügen Sie den Hook hinzu, der jeweils aufgerufen wird.

Beispiel:

/**
 * Handles posts without a title. Uses the first 35 caharacters instead.
 *
 * @wp-hook the_title 20
 * @param  string $title
 * @return string
 */
function t5_fill_empty_title( $title )
{
}

Der @wp-hook the_title 20 teilt dem Leser genau mit, wann diese Funktion aufgerufen wird und wie sie entfernt werden soll. Geben Sie für komplexen Code Verwendungsbeispiele im DocBlock an.

Vermeiden Sie Code, der das Schreiben von Plugin-Code erschwert:

  • Niemals Dateien einschließen, Funktionen deklarieren oder globale Variablen in Ansichtsdateien (Vorlagen) erstellen. Autoren von Kinderthemen müssten diese erneut erstellen - Zeitverschwendung.
  • Führen Sie niemals nur Code aus, wenn der functions.php aufgerufen wird. Binden Sie alles an einen Hook, damit Plugins den Code deaktivieren können.
  • Verwenden Sie niemals eine Priorität 0.
  • Verwenden Sie in Ihrem Design niemals require, require_once oder include und include_once. Verwenden Sie stattdessen locate_template() . In einigen Fällen registriert ein Plugin möglicherweise sein eigenes Verzeichnis als zusätzliches Themenverzeichnis für ein untergeordnetes Thema. Mit locate_template() kann ein solches Plugin eine komplette Datei ersetzen.
  • Erstellen Sie niemals anonyme Objekte .
  • Fügen Sie niemals benutzerdefinierte Beitragstypen, benutzerdefinierte Taxonomien, Shortcodes oder Kontaktformulare in ein Thema ein. Das ist einfaches Plugin-Territorium.

Und zu guter Letzt: Verwenden Sie die Versionskontrolle (Git, Mercurial), schreiben Sie atomare Commits und erklären Sie in jeder Commit-Nachricht , warum Sie diese Änderung vorgenommen haben .

3
fuxia

Versuchen Sie standardisierte Haken zu verwenden. Schauen Sie sich die aus der Theme Hook Alliance an: https://github.com/zamoose/themehookalliance

1
Otto