{"id":471,"date":"2017-05-15T09:47:02","date_gmt":"2017-05-15T07:47:02","guid":{"rendered":"http:\/\/evileu.de\/zum-schwarzen-pinguin\/?p=471"},"modified":"2017-05-15T18:30:04","modified_gmt":"2017-05-15T16:30:04","slug":"statt-dirty-trick-die-saubere-loesung-mit-submenu-page","status":"publish","type":"post","link":"https:\/\/evileu.de\/zum-schwarzen-pinguin\/2017\/05\/15\/statt-dirty-trick-die-saubere-loesung-mit-submenu-page\/","title":{"rendered":"Statt Dirty Trick: die saubere L\u00f6sung mit Submenu Page"},"content":{"rendered":"<p>Na bitte, ich wu\u00dfte doch dass es da eine sauberere L\u00f6sung geben muss. Ich lasse die beiden vorigen Artikel mal so stehen (wir lernen daraus) und zeige hier einen anderen Ansatz f\u00fcr das Unterformular, das bislang ja so nackt und weiss als reine PHP-Datei dasteht.<\/p>\n<h2>Der erste Vorteil: durchg\u00e4ngige Benutzeroberfl\u00e4che<\/h2>\n<p>Das ist zwar eigentlich nur eine kosmetische Korrektur, funktioniert hats auch vorher, aber sch\u00f6ner ist es ja schon wenn man im AdminScreen-Kontext bleibt.<\/p>\n<h2>Der zweite Vorteil: wir sparen uns den require(wp-load.php)<\/h2>\n<p>Das ist schon knackiger. Es ist ja nicht &#8222;considered best practice&#8220;, wenn man den ganzen WordPress-Funktionsapparat in einem Plugin nochmal l\u00e4dt. Man kanns machen, aber es ist und bleibt eine Kr\u00fccke. Das k\u00f6nnen wir uns jetzt schenken, weil unsere Submenu Page alle Funktionalit\u00e4ten schon mitbringt.<\/p>\n<h2>Submenu &#8211; wie wirds gemacht?<\/h2>\n<p>Wir arbeiten ab jetzt nur noch mit einer PHP-Datei f\u00fcr unser Plugin, da nehmen wir genau die adressen-tabelle.php aus den vorigen Beitr\u00e4gen. Die erg\u00e4nzen wir um einen Eintrag, der eine &#8222;elternlose&#8220; Submenu-Seite definiert:<\/p>\n<p><em>add_action(&#8218;admin_menu&#8216;, &#8218;Edit&#8216;);<\/em><\/p>\n<p><em>\u00a0function Edit(){<\/em><br \/>\n<em>add_submenu_page( &#8218;<strong>null<\/strong>&#8218;, &#8218;Adresse Edit&#8216;, &#8218;Adresse Edit&#8216;, &#8218;administrator&#8216;, &#8218;adresse-edit&#8216;, &#8218;<strong>AdresseEditAusgabe<\/strong>&#8218; );<\/em><br \/>\n<em>\u00a0}<\/em><\/p>\n<p>Das &#8218;<strong>null<\/strong>&#8218; im ersten Tag (das ist der f\u00fcr den Parent) ist hier der Knackpunkt. Das bewirkt, dass die Seite zwar aufrufbar ist, aber nicht im Admin Screen Men\u00fc auftaucht.<\/p>\n<p>Der letzte Tag <em><strong>AdresseEditAusgabe<\/strong><\/em> definiert die Funktion, die bei Aufruf unseres Submen\u00fcs ausgef\u00fchrt wird. Die m\u00fcssen wir nat\u00fcrlich noch schreiben, aber das wird easy. Da kopieren wir uns einfach den gesamten Inhalt unserer Unterseite edit-adresse.php rein und schmeissen den jetzt \u00fcberfl\u00fcssigen WordPress-Load raus. Das wars schon&#8230; fast.<\/p>\n<h2>Der Aufruf unserer funkelnagelneuen Submenu Page<\/h2>\n<p>Der muss nat\u00fcrlich noch ins Action-Tag unserer aufrufenden Seite. Da tauschen wir einfach die Belegung f\u00fcr die Variable aus:<\/p>\n<p><em>\/*Submenu-URL zusammenbauen*\/\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0<\/em><br \/>\n<em>\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0$meinplugin_URL = admin_url();<\/em><br \/>\n<em>\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0$meinplugin_URL = $meinplugin_URL.&#8220;<strong>admin.php?page=adresse-edit<\/strong>&#8222;;<\/em><\/p>\n<p>Das admin_url() holt uns die Adresse des Admin Screens, die fett gekennzeichnete Erg\u00e4nzung enth\u00e4lt den Slug unserer Submenu Seite.<\/p>\n<p>Klappts? Wenn sie jetzt aus der Adressentabelle heraus auf einen &#8222;Edit&#8220;-Button klicken, sollte sowas \u00e4hnliches angezeigt werden:<\/p>\n<div id=\"attachment_472\" style=\"width: 789px\" class=\"wp-caption alignnone\"><img aria-describedby=\"caption-attachment-472\" decoding=\"async\" loading=\"lazy\" class=\"size-full wp-image-472\" src=\"http:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-content\/uploads\/2017\/05\/submenu_adminscreen.jpg\" alt=\"submenu_adminscreen\" width=\"779\" height=\"531\" srcset=\"https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-content\/uploads\/2017\/05\/submenu_adminscreen.jpg 779w, https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-content\/uploads\/2017\/05\/submenu_adminscreen-300x204.jpg 300w, https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-content\/uploads\/2017\/05\/submenu_adminscreen-768x524.jpg 768w, https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-content\/uploads\/2017\/05\/submenu_adminscreen-624x425.jpg 624w\" sizes=\"(max-width: 779px) 100vw, 779px\" \/><p id=\"caption-attachment-472\" class=\"wp-caption-text\">submenu_adminscreen<\/p><\/div>\n<h2>Schon besser, oder?<\/h2>\n<p>Und man spart sich wie gesagt den nicht ganz sauberen Trick mit dem wp-load, da werden auch die Puristen zufrieden sein. Man spart sich auch die zweite PHP-Datei, weil jetzt die ganze Funktionalit\u00e4t in unserer einen Plugin-Datei adressen-tabelle.php steckt. Ich finde die L\u00f6sung mit der &#8222;elternlosen&#8220; Submenu Page sauber, und sowas wird man immer wieder mal gebrauchen k\u00f6nnen, wenn man in einem Plugin auf eine Unterseite verzweigen m\u00f6chte. Hier noch die Plugin-Datei <a href=\"http:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-content\/uploads\/2017\/05\/adressen-tabelle.zip\">adressen-tabelle.php<\/a> als ZIP, der Vollst\u00e4ndigkeit halber. Und jetzt viel Spa\u00df beim Nachbauen!<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Na bitte, ich wu\u00dfte doch dass es da eine sauberere L\u00f6sung geben muss. Ich lasse die beiden vorigen Artikel mal so stehen (wir lernen daraus) und zeige hier einen anderen Ansatz f\u00fcr das Unterformular, das bislang ja so nackt und weiss als reine PHP-Datei dasteht. Der erste Vorteil: durchg\u00e4ngige Benutzeroberfl\u00e4che Das ist zwar eigentlich nur [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[20,21,11,4,8,2],"tags":[],"_links":{"self":[{"href":"https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-json\/wp\/v2\/posts\/471"}],"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=471"}],"version-history":[{"count":1,"href":"https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-json\/wp\/v2\/posts\/471\/revisions"}],"predecessor-version":[{"id":474,"href":"https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-json\/wp\/v2\/posts\/471\/revisions\/474"}],"wp:attachment":[{"href":"https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-json\/wp\/v2\/media?parent=471"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-json\/wp\/v2\/categories?post=471"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-json\/wp\/v2\/tags?post=471"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}