Kategorien
PHP WordPress

WordPress Plugin selber erstellen Tutorial

Wenn man WordPress erweitert, sollte man immer seinen eigenen Code sauber von dem WordPress Core  trennen und ein Plugin programmieren. Ein weiterer Vorteil ist, dass man sein hard ercodetes Plugin natürlich auch in das WordPress Plugin Verzeichnis stellen kann nach Vollendung.

Follgende Schritte sind durchzuführen:

  • die Wahl eines eindeutigen Namens, damit es nicht zur Kollision kommt mit anderen Plugins und Klassen
  • eine readme.txt für das WordPress Plugin Verzeichnis
  • die Hauptdatei sollte einen Kommentarblock enthalten mit den folgenden Informationen:
Plugin Name: Name des Plugins
Plugin URI: http:// Plugin Webseite
Description: kurze Beschreibung des Plugin.
Version: Plugin's Versions Nummer, bspw.: 1.0
Author: Name des Plugin Autors
Author URI: http:// Autor URL
License: Lizens bspw. GPL2

Der Code muss folgender Maßen gespeichert werden:
/wp-content/plugins/{pluginname}/{pluginname}.php

Unter Plugins im Backend sollte jetzt ein inaktives Plugin mit unserem Namen stehen.

Verbindung herstellen zwischen WordPress und dem Plugin

Man kann sich ganz einfach über Hooks zu bestimmten Events eines Blogs anmelden, an denen das eigene Plugin

  1. Veränderungen vernehmen soll, z.B. an Blog Artikel Überschrift wird geladen (Filter-Hook auf the_title)
  2. Oder wenn bestimmte Daten generiert werden, wie z.B. der Footer (Action-Hook auf wp_footer)
  3. eigene Template Tags anlegen, die dann "geparst" werden und das Plugin an der Stelle ausgeführt wird

Ein komplette Liste mit Hooks findet man hier.

Wenn das Plugin bspw. eine eigene Seite generieren soll, sollte man im Backend unter Seiten eine neue Seite anlegen und als Text nur den Namen des Plugins in eckigen Klammern einfügen, z.B. [SuperPlugin] und einen passenden Titel eingeben.

Danach muss man sich auf die passende Hook zum Laden von Seiten registrieren und lauern und mit echo seinen Code ausgeben:

add_shortcode( 'threedeenavigation', 'threeDeeNavigation_convertShortcodeToNavigation' );
function threeDeeNavigation_convertShortcodeToNavigation( $atts ){   
    return "<b>Hallo</b><br>";
}

//add JS and css
add_action('wp_enqueue_scripts', 'enqueue_threedeenavigation_scripts');
function enqueue_threedeenavigation_scripts()
{
    $threeDeeNavigationClass = new threeDeeNavigationClass();
    $categories = get_categories();
    $threeDeeNavigationClass->insertJavascriptAddCategories($categories);
    foreach ($categories as $category) {
    var_dump($categories);
    }
}

 

class threeDeeNavigationClass {

    public function getPluginPath() {
        return trailingslashit(trailingslashit(WP_PLUGIN_URL) . plugin_basename(dirname(__FILE__)));
    }
    public function insertJavascriptAddCategories($categories)
    {
        //http://www.prelovac.com/vladimir/best-practice-for-adding-javascript-code-to-wordpress-plugin
        wp_enqueue_script('threeDeeNavigationScript', $this->getPluginPath() .  'js/threeDeeNavigation.js', array('jquery'));
        wp_localize_script( 'threeDeeNavigationScript', 'threeDeeNavigationData', array(
        'categories' => json_encode($categories)

        ));

    }
}

Bsp für die saubere Übergabe von Parametern von WordPress PHP nach Javascript (threeDeeNavigation.js):

//muss bei wordpress so mit rein leider, wegen coflicts mit WordPress, jquery statt mit $("#id").val() mit jQuery("#id").val() nutzen
 console.log("Test Log");
var $j = jQuery.noConflict();

 $j(document).ready(function() {
     categories = threeDeeNavigationData.categories;
     categories = categories.replace(/&quot;/g, '"');
     categories = jQuery.parseJSON(categories);
      console.log(categories);
});