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
- Veränderungen vernehmen soll, z.B. an Blog Artikel Überschrift wird geladen (Filter-Hook auf the_title)
- Oder wenn bestimmte Daten generiert werden, wie z.B. der Footer (Action-Hook auf wp_footer)
- 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(/"/g, '"'); categories = jQuery.parseJSON(categories); console.log(categories); });