{"id":1065,"date":"2018-04-03T13:53:47","date_gmt":"2018-04-03T11:53:47","guid":{"rendered":"http:\/\/evileu.de\/zum-schwarzen-pinguin\/?p=1065"},"modified":"2018-04-03T18:13:32","modified_gmt":"2018-04-03T16:13:32","slug":"noch-mehr-widget-bastelei-ein-eigenes-dropdown-feld","status":"publish","type":"post","link":"https:\/\/evileu.de\/zum-schwarzen-pinguin\/2018\/04\/03\/noch-mehr-widget-bastelei-ein-eigenes-dropdown-feld\/","title":{"rendered":"Noch mehr Widget-Bastelei: ein eigenes Dropdown-Feld"},"content":{"rendered":"<p>Ich hab im vorigen Artikel etwas geschummelt und mir ein fertiges Konstrukt f\u00fcr das Dropdown-Feld mit den Kategorien ergooglet, das ging so:<\/p>\n<pre>&lt;p&gt;\r\n\u00a0\u00a0\u00a0 &lt;label for=\"&lt;?php echo $this-&gt;get_field_id( 'select' ); ?&gt;\"&gt;Kategorie ausw\u00e4hlen:&lt;\/label&gt;\r\n\u00a0\u00a0\u00a0 &lt;?php <span style=\"color: #ff0000;\">wp_dropdown_categories<\/span>( array( 'show_option_none' =&gt;' ','name' =&gt; $this-&gt;get_field_name( 'select' ), 'selected' =&gt; $select ) ); ?&gt;\r\n\u00a0 &lt;\/p&gt;<\/pre>\n<p>Wer unbedingt genaueres dazu wissen m\u00f6chte, kanns im Codex <a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/wp_dropdown_categories\/\">bei wp_dropdown_categories<\/a> nachschauen, ich spar mir das, weil es der volle Overkill mit ungef\u00e4hr 20 Parametern ist, und die Source-Beispiele auch nicht gerade zur Erhellung beitragen.<\/p>\n<p>Dropdown-Felder in Widgets braucht man aber immer wieder, und ich stelle hier eine realtiv einfache Methode vor, wie man sie sich selbst zusammenbastelt.<\/p>\n<h2>Das Anwendungsbeispiel<\/h2>\n<p>Ich m\u00f6chte im Widget ein Dropdown-Feld haben, in dem man einen Post Type w\u00e4hlen kann, die Optionen sollen Post, Page und Custom Type heissen. Dazu erweitern wir den Widget-Code aus dem vorigen Artikel um ein Feld namens &#8222;posttype&#8220;, ich markiere hier mal in rot wo man da \u00fcberall eingreifen muss:<\/p>\n<pre>\u00a0\u00a0\u00a0 function form($instance)\r\n\u00a0 {\r\n\u00a0\u00a0\u00a0 $instance = wp_parse_args( (array) $instance, array( 'title' =&gt; '' ) );\r\n\u00a0\u00a0\u00a0 $title = $instance['title'];\r\n\u00a0\u00a0 \u00a0\r\n\u00a0\u00a0 <span style=\"color: #ff0000;\">\u00a0$instance = wp_parse_args( (array) $instance, array( 'posttype' =&gt; '' ) );<\/span>\r\n<span style=\"color: #ff0000;\">\u00a0\u00a0\u00a0 $select = $instance['posttype'];<\/span>\r\n?&gt;\r\n\u00a0 &lt;p&gt;&lt;label for=\"&lt;?php echo $this-&gt;get_field_id('title'); ?&gt;\"&gt;Titel: &lt;input class=\"widefat\" id=\"&lt;?php echo $this-&gt;get_field_id('title'); ?&gt;\" name=\"&lt;?php echo $this-&gt;get_field_name('title'); ?&gt;\" type=\"text\" value=\"&lt;?php echo attribute_escape($title); ?&gt;\" \/&gt;&lt;\/label&gt;&lt;\/p&gt;\r\n\u00a0 \r\n\u00a0\u00a0<span style=\"color: #ff0000;\"> &lt;--! HIER KOMMT DAS DROPDOWN HIN--&gt;<\/span>\r\n\u00a0 \u00a0\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\r\n&lt;?php\r\n\u00a0 }\r\n\u00a0function update($new_instance, $old_instance)\r\n\u00a0 {\r\n\u00a0\u00a0\u00a0 $instance = $old_instance;\r\n\u00a0\u00a0 \u00a0\r\n\u00a0\u00a0\u00a0 $instance['title'] = $new_instance['title'];\r\n\u00a0\u00a0 <span style=\"color: #ff0000;\">\u00a0$instance['posttype'] = $new_instance['posttype'];<\/span>\r\n\u00a0\u00a0 \u00a0\r\n\u00a0\u00a0\u00a0 return $instance;\r\n\u00a0 }<\/pre>\n<p>Dann kommt in die function form() folgende Konstruktion f\u00fcr das Dropdown-Feld, ich markiere gr\u00fcn wo man da eigene Werte eintr\u00e4gt:<\/p>\n<pre>&lt;p&gt;<span style=\"color: #008000;\">Post Type ausw\u00e4hlen<\/span>\r\n\u00a0\u00a0 &lt;select id=\"&lt;?php echo $this-&gt;get_field_id('posttype'); ?&gt;\" name=\"&lt;?php echo $this-&gt;get_field_name('posttype'); ?&gt;\" class=\"widefat\" style=\"width:100%;\"&gt;\r\n\u00a0\u00a0\u00a0 &lt;option &lt;?php selected( $instance['posttype'], '<span style=\"color: #008000;\">Post<\/span>'); ?&gt; value=\"<span style=\"color: #008000;\">Post<\/span>\"&gt;<span style=\"color: #008000;\">Post<\/span>&lt;\/option&gt;\r\n\u00a0\u00a0\u00a0 &lt;option &lt;?php selected( $instance['posttype'], '<span style=\"color: #008000;\">Page<\/span>'); ?&gt; value=\"<span style=\"color: #008000;\">Page<\/span>\"&gt;<span style=\"color: #008000;\">Page<\/span>&lt;\/option&gt; \r\n\u00a0\u00a0\u00a0 &lt;option &lt;?php selected( $instance['posttype'], '<span style=\"color: #008000;\">Custom Type<\/span>'); ?&gt; value=\"<span style=\"color: #008000;\">Custom Type<\/span>\"&gt;<span style=\"color: #008000;\">Custom Type<\/span>&lt;\/option&gt;\u00a0 \u00a0\r\n\u00a0\u00a0 \u00a0&lt;\/select&gt;\r\n\u00a0\u00a0 &lt;\/p&gt;<\/pre>\n<p>Das erzeugt uns im Widget das Dropdown-Feld mit den drei m\u00f6glichen Werten:<\/p>\n<div id=\"attachment_1066\" style=\"width: 362px\" class=\"wp-caption alignnone\"><img aria-describedby=\"caption-attachment-1066\" decoding=\"async\" loading=\"lazy\" class=\"size-full wp-image-1066\" src=\"http:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-content\/uploads\/2018\/04\/dropdown_drei_werte.jpg\" alt=\"dropdown_drei_werte\" width=\"352\" height=\"364\" srcset=\"https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-content\/uploads\/2018\/04\/dropdown_drei_werte.jpg 352w, https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-content\/uploads\/2018\/04\/dropdown_drei_werte-290x300.jpg 290w\" sizes=\"(max-width: 352px) 100vw, 352px\" \/><p id=\"caption-attachment-1066\" class=\"wp-caption-text\">dropdown_drei_werte<\/p><\/div>\n<p>F\u00fcr die Ausgabe modifizieren wir jetzt nur noch die function widget() ein bisschen:<\/p>\n<pre>\u00a0function widget($args, $instance)\r\n\u00a0 {\r\n\u00a0\u00a0\u00a0 extract($args, EXTR_SKIP);\r\n\u00a0\r\n\u00a0\u00a0\u00a0 echo $before_widget;\r\n\u00a0\u00a0 \u00a0\r\n\u00a0\u00a0 \u00a0$title = $instance['title'];\r\n\u00a0\u00a0 \u00a0<span style=\"color: #008000;\">$posttype = $instance['posttype'];<\/span>\r\n\u00a0\u00a0 \u00a0 \r\n\u00a0\u00a0\u00a0 \/\/ WIDGET CODE KOMMT HIERHIN\r\n\u00a0\u00a0\u00a0 echo \"&lt;h3&gt;\".$title.\"&lt;\/h3&gt;\";\r\n\u00a0\u00a0 \u00a0\r\n\u00a0\u00a0 \u00a0<span style=\"color: #008000;\">echo \"Post Type= \".$posttype.\"&lt;br&gt;\";<\/span>\r\n\u00a0\u00a0 \u00a0\r\n\u00a0\u00a0 \u00a0echo $after_widget;\r\n\u00a0 }<\/pre>\n<p>Fertig! Ausgabe:<\/p>\n<div id=\"attachment_1067\" style=\"width: 231px\" class=\"wp-caption alignnone\"><img aria-describedby=\"caption-attachment-1067\" decoding=\"async\" loading=\"lazy\" class=\"size-full wp-image-1067\" src=\"http:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-content\/uploads\/2018\/04\/posttype_ausgabe.jpg\" alt=\"posttype_ausgabe\" width=\"221\" height=\"184\" \/><p id=\"caption-attachment-1067\" class=\"wp-caption-text\">posttype_ausgabe<\/p><\/div>\n<p>Nicht besonders spektakul\u00e4r, aber ausbauf\u00e4hig. Ich denke, das kann man immer wieder mal brauchen, wenn der User aus einer vorgegebenen Liste eine Auswahl treffen soll.<\/p>\n<h2>Kleine Erg\u00e4nzung: ein numerisches Feld geht auch<\/h2>\n<p>Das geht ganz einfach, indem man den type des Textinput-Felds auf number stellt, der Rest bleibt wie vorher:<\/p>\n<pre>&lt;p&gt;&lt;label for=\"&lt;?php echo $this-&gt;get_field_id('anzahl'); ?&gt;\"&gt;Anzahl: &lt;input id=\"&lt;?php echo $this-&gt;get_field_id('anzahl'); ?&gt;\" \r\nname=\"&lt;?php echo $this-&gt;get_field_name('anzahl'); ?&gt;\" type=\"<span style=\"color: #ff0000;\">number<\/span>\" value=\"&lt;?php echo attribute_escape($anzahl); ?&gt;\" \/&gt;&lt;\/label&gt;&lt;\/p&gt;<\/pre>\n<p>Schon klappts:<\/p>\n<div id=\"attachment_1070\" style=\"width: 346px\" class=\"wp-caption alignnone\"><img aria-describedby=\"caption-attachment-1070\" decoding=\"async\" loading=\"lazy\" class=\"size-full wp-image-1070\" src=\"http:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-content\/uploads\/2018\/04\/numerisch.jpg\" alt=\"numerisch\" width=\"336\" height=\"395\" srcset=\"https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-content\/uploads\/2018\/04\/numerisch.jpg 336w, https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-content\/uploads\/2018\/04\/numerisch-255x300.jpg 255w\" sizes=\"(max-width: 336px) 100vw, 336px\" \/><p id=\"caption-attachment-1070\" class=\"wp-caption-text\">numerisch<\/p><\/div>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Ich hab im vorigen Artikel etwas geschummelt und mir ein fertiges Konstrukt f\u00fcr das Dropdown-Feld mit den Kategorien ergooglet, das ging so: &lt;p&gt; \u00a0\u00a0\u00a0 &lt;label for=&#8220;&lt;?php echo $this-&gt;get_field_id( &#8217;select&#8216; ); ?&gt;&#8220;&gt;Kategorie ausw\u00e4hlen:&lt;\/label&gt; \u00a0\u00a0\u00a0 &lt;?php wp_dropdown_categories( array( &#8217;show_option_none&#8216; =&gt;&#8216; &#8218;,&#8217;name&#8216; =&gt; $this-&gt;get_field_name( &#8217;select&#8216; ), &#8217;selected&#8216; =&gt; $select ) ); ?&gt; \u00a0 &lt;\/p&gt; Wer unbedingt genaueres dazu [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[45,2],"tags":[],"_links":{"self":[{"href":"https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-json\/wp\/v2\/posts\/1065"}],"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=1065"}],"version-history":[{"count":4,"href":"https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-json\/wp\/v2\/posts\/1065\/revisions"}],"predecessor-version":[{"id":1072,"href":"https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-json\/wp\/v2\/posts\/1065\/revisions\/1072"}],"wp:attachment":[{"href":"https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-json\/wp\/v2\/media?parent=1065"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-json\/wp\/v2\/categories?post=1065"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-json\/wp\/v2\/tags?post=1065"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}