{"id":418,"date":"2017-05-08T14:01:20","date_gmt":"2017-05-08T12:01:20","guid":{"rendered":"http:\/\/evileu.de\/zum-schwarzen-pinguin\/?p=418"},"modified":"2017-05-08T14:01:20","modified_gmt":"2017-05-08T12:01:20","slug":"unser-erstes-plugin-setzecode","status":"publish","type":"post","link":"https:\/\/evileu.de\/zum-schwarzen-pinguin\/2017\/05\/08\/unser-erstes-plugin-setzecode\/","title":{"rendered":"Unser erstes Plugin: SetzeCode 1, die Plugin-Definition"},"content":{"rendered":"<h2>Was ist eigentlich ein Plugin?<\/h2>\n<p>Ganz vereinfacht gesagt: ein Plugin ist eine Funktionserweiterung des Admin Panels. Es bekommt einen eigenen Men\u00fceintrag (kann man nach Belieben definieren, sp\u00e4ter mehr dazu), und man kann eine Funktion hinterlegen, die bei Aufruf des Men\u00fceintrags ausgef\u00fchrt wird.<\/p>\n<h2>Was soll unser Plugin k\u00f6nnen?<\/h2>\n<p>Wir wollen den Wert einer Option in der Tabelle wp_options setzen bzw. \u00e4ndern. Daf\u00fcr brauchen wir ein Eingabefeld, in das der Benutzer seinen Optionswert eintragen kann, und einen &#8222;Abschicken&#8220;-Button, der den Neueintrag setzt. Das wars eigentlich schon, und wir l\u00f6sen das nat\u00fcrlich mit einem kleinen Formular, aber dazu sp\u00e4ter mehr. Jetzt gehts erstmal darum:<\/p>\n<h2>Wie definiere ich ein Plugin?<\/h2>\n<p>Daf\u00fcr legt man sich eine PHP-Datei an, die bestimmten Anforderungen entsprechen muss (gleich mehr). Dieser Datei gibt man einen aussagekr\u00e4ftigen Namen, in unserem Fall z.B. setze_code.php. Dann legt man sich unterhalb des WordPress-Verzeichnisses <strong>&#8230;wp-content\/plugins<\/strong> ein eigenes neues Verzeichnis f\u00fcr das Plugin an und benennt es entsprechend, also z. B. <strong>&#8230;wp-content\/plugins\/setze-code<\/strong>. In dieses Verzeichnis schieben wir sp\u00e4ter unsere PHP-Datei rein, aber jetzt f\u00fcllen wir sie erstmal mit Funktionalit\u00e4t.<\/p>\n<h2>Der Header des Plugin-Skripts<\/h2>\n<p>WordPress liest aus dem Header die relevanten Plugin-Informationen zur Darstellung im Plugins-Men\u00fc, der muss also bestimmten Anforderungen gen\u00fcgen. Das sieht beispielsweise so aus:<\/p>\n<p><strong><em>\/*<\/em><\/strong><br \/>\n<em><strong>Plugin Name:<\/strong> SetzeCode<\/em><br \/>\n<em><strong>Plugin URI:<\/strong> http:\/\/localhost\/wordpress\/wp-content\/plugins\/SetzeCode<\/em><br \/>\n<em><strong>Description:<\/strong> Setzt eine Option f\u00fcr einen benutzerdefinierten Code<\/em><br \/>\n<em><strong>Version:<\/strong> 1.0<\/em><br \/>\n<em><strong>Author:<\/strong> Evi Leu<\/em><br \/>\n<em><strong>Author URI:<\/strong> http:\/\/www.evileu.de<\/em><br \/>\n<strong><em>*\/<\/em><\/strong><\/p>\n<p>Die <strong>fett<\/strong> markierten Schl\u00fcsselw\u00f6rter m\u00fcssen ganz genau so geschrieben werden wie sie hier zu sehen sind, inklusive der Kommentar-Tags (\/*). Die hinter den Schl\u00fcsselw\u00f6rtern hinterlegten Informationen kann man frei formulieren, aber es sollten schon sinnvolle Informationen sein, die man hier eintr\u00e4gt, die tauchen dann n\u00e4mlich im Plugins Men\u00fc auf:<\/p>\n<div id=\"attachment_419\" style=\"width: 583px\" class=\"wp-caption alignnone\"><img aria-describedby=\"caption-attachment-419\" decoding=\"async\" loading=\"lazy\" class=\"size-full wp-image-419\" src=\"http:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-content\/uploads\/2017\/05\/pluginscreen.jpg\" alt=\"pluginscreen\" width=\"573\" height=\"72\" srcset=\"https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-content\/uploads\/2017\/05\/pluginscreen.jpg 573w, https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-content\/uploads\/2017\/05\/pluginscreen-300x38.jpg 300w\" sizes=\"(max-width: 573px) 100vw, 573px\" \/><p id=\"caption-attachment-419\" class=\"wp-caption-text\">pluginscreen<\/p><\/div>\n<p>Alles klar soweit mit dem Header? Dann gehts weiter mit dem:<\/p>\n<h2>Eintrag im Admin-Panel<\/h2>\n<p>Mit der Funktion add_action() wird WordPress angewiesen, eine neue Funktionalit\u00e4t hinzuzuf\u00fcgen. Wir wollen das im Admin Panel tun, also kriegt der erste Parameter den Wert &#8222;admin_menu&#8220; mit. Der zweite Parameter benennt die Funktion, die bei Aufruf des Men\u00fceintrags ausgef\u00fchrt werden soll.<\/p>\n<p><em>add_action(&#8218;admin_menu&#8216;, &#8218;basicPluginMenu&#8216;);<\/em><\/p>\n<p>Die Funktion <em>&#8218;basicPluginMenu&#8216;<\/em> sieht f\u00fcr unser Plugin folgendermassen aus:<\/p>\n<p><em>function basicPluginMenu() {<\/em><br \/>\n<em>$appName = &#8218;SetzeCode&#8216;;<\/em><br \/>\n<em>$appID = &#8217;setze-code&#8216;;<\/em><br \/>\n<em>add_menu_page($appName, $appName, &#8218;administrator&#8216;, $appID, &#8218;pluginAdminScreen&#8216;);<\/em><br \/>\n<em>}<\/em><\/p>\n<p>Mehr zur Funktion <a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/add_menu_page\/\">add_menu_page() im Codex<\/a>, ich machs hier mal kurz, als Parameter werden hier als absolutes Minimum mitgegeben:<\/p>\n<ul>\n<li>Seitentitel (wird im Browsertab angezeigt)<\/li>\n<li>Men\u00fctitel (Wird im Adminmen\u00fc angezeigt<\/li>\n<li>Rolle (administrator ist hier v\u00f6llig OK, sind ja nur wir)<\/li>\n<li>Slug (taucht im Permalink wieder auf)<\/li>\n<li>Auszuf\u00fchrende Funktion<\/li>\n<\/ul>\n<p>Das erstellt uns einen neuen Men\u00fceintrag unten am Ende des Admin Panels, und der hei\u00dft &#8211; oh was wohl?<\/p>\n<p><strong>SetzeCode<\/strong><\/p>\n<p>Man k\u00f6nnte den Men\u00fceintrag auch anders positionieren und z.B. ins Untermen\u00fc Werkzeuge verschieben, und ein anderes Icon ausw\u00e4hlen und und und, aber das sparen wir uns jetzt mal, es geht rein um die Funktionalit\u00e4t.<\/p>\n<h2>Die Funktion, die das Plugin ausf\u00fchren soll<\/h2>\n<p>Haben wir oben mit <em>pluginAdminScreen<\/em> benamst, und die definieren wir uns gleich im n\u00e4chsten Beitrag. Jetzt machen wir erstmal was ganz banales, wir geben mal nur eine Titelzeile f\u00fcr unser Plugin aus:<\/p>\n<p><em>function pluginAdminScreen() {<\/em><br \/>\n<em>\u00a0\u00a0 \u00a0echo &#8222;&lt;h1&gt;Setze Meinen Code&lt;\/h1&gt;&#8220;;<\/em><br \/>\n<em>}<\/em><\/p>\n<p>Funzt alles? Men\u00fceintrag vorhanden, \u00dcberschrift wird ausgegeben? Na fein, dann basteln wir uns die Options-setzen-Funktion im n\u00e4chsten Beitrag. Hier folgt mal noch zur Kontrolle der komplette Code der setze_code.php:<\/p>\n<p><em>&lt;?php<\/em><br \/>\n<em>\/*<\/em><br \/>\n<em>Plugin Name: SetzeCode<\/em><br \/>\n<em>Plugin URI: http:\/\/localhost\/wordpress\/wp-content\/plugins\/SetzeCode<\/em><br \/>\n<em>Description: Setzt eine Option f\u00fcr einen benutzerdefinierten Code<\/em><br \/>\n<em>Version: 1.0<\/em><br \/>\n<em>Author: Evi Leu<\/em><br \/>\n<em>Author URI: http:\/\/www.evileu.de<\/em><br \/>\n<em>*\/<\/em><br \/>\n<em>add_action(&#8218;admin_menu&#8216;, &#8218;basicPluginMenu&#8216;);<\/em><\/p>\n<p><em>function basicPluginMenu() {<\/em><br \/>\n<em>$appName = &#8218;SetzeCode&#8216;;<\/em><br \/>\n<em>$appID = &#8217;setze-code&#8216;;<\/em><br \/>\n<em>add_menu_page($appName, $appName, &#8218;administrator&#8216;, $appID, &#8218;pluginAdminScreen&#8216;);<\/em><br \/>\n<em>}<\/em><\/p>\n<p><em>function pluginAdminScreen() {<\/em><br \/>\n<em>\u00a0\u00a0 \u00a0echo &#8222;&lt;h1&gt;Setze Meinen Code&lt;\/h1&gt;&#8220;;<\/em><br \/>\n<em>}<\/em><br \/>\n<em>?&gt;<\/em><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Was ist eigentlich ein Plugin? Ganz vereinfacht gesagt: ein Plugin ist eine Funktionserweiterung des Admin Panels. Es bekommt einen eigenen Men\u00fceintrag (kann man nach Belieben definieren, sp\u00e4ter mehr dazu), und man kann eine Funktion hinterlegen, die bei Aufruf des Men\u00fceintrags ausgef\u00fchrt wird. Was soll unser Plugin k\u00f6nnen? Wir wollen den Wert einer Option in der [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[4,8,2],"tags":[],"_links":{"self":[{"href":"https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-json\/wp\/v2\/posts\/418"}],"collection":[{"href":"https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-json\/wp\/v2\/comments?post=418"}],"version-history":[{"count":2,"href":"https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-json\/wp\/v2\/posts\/418\/revisions"}],"predecessor-version":[{"id":423,"href":"https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-json\/wp\/v2\/posts\/418\/revisions\/423"}],"wp:attachment":[{"href":"https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-json\/wp\/v2\/media?parent=418"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-json\/wp\/v2\/categories?post=418"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-json\/wp\/v2\/tags?post=418"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}