{"id":334,"date":"2017-03-18T16:37:07","date_gmt":"2017-03-18T15:37:07","guid":{"rendered":"http:\/\/evileu.de\/zum-schwarzen-pinguin\/?p=334"},"modified":"2017-03-19T17:49:30","modified_gmt":"2017-03-19T16:49:30","slug":"gut-gemeint-bedingt-brauchbar-benutzerdefinierte-felder","status":"publish","type":"post","link":"https:\/\/evileu.de\/zum-schwarzen-pinguin\/2017\/03\/18\/gut-gemeint-bedingt-brauchbar-benutzerdefinierte-felder\/","title":{"rendered":"Gut gemeint, bedingt brauchbar: Benutzerdefinierte Felder"},"content":{"rendered":"<h2>Einleitung<\/h2>\n<p>Als vor ein paar Jahren die benutzerdefinierten Felder (Custom Fields) in WordPress eingef\u00fchrt wurden, wurde das als gro\u00dfer Schritt in Richtung CMS hochgelobt und gleich mit -zig Anwendungsbeispielen unterf\u00fcttert. Benutzerdefinierte Felder sind daf\u00fcr gedacht, die Beitr\u00e4ge mit weiteren Daten anzureichern, das kann ganz unterschiedliche Anwendungen haben. Man k\u00f6nnte z.B. in einem B\u00fccherblog die ISBN-Nummer des jeweils besprochenen Buches in ein benutzerdefiniertes Feld eintragen, man k\u00f6nnte in einem kleinen Online-Shop zu einzelnen Artikeln die Preise hinterlegen, man k\u00f6nnte in einem Mitgliederverzeichnis f\u00fcr einen Verein verschiedene Daten zu den einzelnen Mitgliedern abspeichern (Geburtsdatum, Telefonnummer, Adresse).<\/p>\n<h2>OK, Feld ist gespeichert. Und jetzt?<\/h2>\n<p>Wenn man seine benutzerdefinierten Felder in den Beitr\u00e4gen auch sehen m\u00f6chte, mu\u00df man sie in den Code der entsprechenden PHP-Datei (z.B. single.php) eintragen, das sieht dann etwa so aus:<\/p>\n<p><code class=\"plain\">&lt;?php get_post_meta(<\/code><code class=\"variable\">$post_id<\/code><code class=\"plain\">, <\/code><code class=\"string\">'$key'<\/code><code class=\"plain\">, <\/code><code class=\"variable\">$single<\/code><code class=\"plain\">); ?&gt;<\/code><\/p>\n<p>Dabei ist die $post_id nat\u00fcrlich die ID des aktuellen Beitrags, das $key ist der Platzhalter f\u00fcr den Namen des benutzerdefinierten Feldes, und $single weist WordPress an, einen einzelnen String auszugeben (alternativ ginge auch ein Array, wenn ein Custom Field mehrere Werte enth\u00e4lt, aber das lassen wir jetzt mal weg).<\/p>\n<p>Ein Beispiel w\u00e4re jetzt hier mal der Preis zu einem Beitrag, der $key w\u00e4re hier schlicht &#8222;Preis&#8220;:<\/p>\n<div id=\"attachment_335\" style=\"width: 898px\" class=\"wp-caption alignnone\"><img aria-describedby=\"caption-attachment-335\" decoding=\"async\" loading=\"lazy\" class=\"size-full wp-image-335\" src=\"http:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-content\/uploads\/2017\/03\/benutzerdefiniert_preis.jpg\" alt=\"benutzerdefiniert_preis\" width=\"888\" height=\"231\" srcset=\"https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-content\/uploads\/2017\/03\/benutzerdefiniert_preis.jpg 888w, https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-content\/uploads\/2017\/03\/benutzerdefiniert_preis-300x78.jpg 300w, https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-content\/uploads\/2017\/03\/benutzerdefiniert_preis-768x200.jpg 768w, https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-content\/uploads\/2017\/03\/benutzerdefiniert_preis-624x162.jpg 624w\" sizes=\"(max-width: 888px) 100vw, 888px\" \/><p id=\"caption-attachment-335\" class=\"wp-caption-text\">benutzerdefiniert_preis<\/p><\/div>\n<h2>Was passiert hinter den Kulissen auf der Datenbank?<\/h2>\n<p>In der Tabelle wp_postmeta landet ein neuer Eintrag mit einer laufenden meta_id:<\/p>\n<div id=\"attachment_336\" style=\"width: 891px\" class=\"wp-caption alignnone\"><img aria-describedby=\"caption-attachment-336\" decoding=\"async\" loading=\"lazy\" class=\"size-full wp-image-336\" src=\"http:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-content\/uploads\/2017\/03\/post_meta_custom_field.jpg\" alt=\"post_meta_custom_field\" width=\"881\" height=\"96\" srcset=\"https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-content\/uploads\/2017\/03\/post_meta_custom_field.jpg 881w, https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-content\/uploads\/2017\/03\/post_meta_custom_field-300x33.jpg 300w, https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-content\/uploads\/2017\/03\/post_meta_custom_field-768x84.jpg 768w, https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-content\/uploads\/2017\/03\/post_meta_custom_field-624x68.jpg 624w\" sizes=\"(max-width: 881px) 100vw, 881px\" \/><p id=\"caption-attachment-336\" class=\"wp-caption-text\">post_meta_custom_field<\/p><\/div>\n<p>Hier wird \u00fcber die post_id der Name und der Wert des benutzerdefinierten Feldes festgehalten. Der meta_value ist \u00fcbrigens ein Longtext, also hier k\u00f6nnen sie jede Menge Text (max. 4.294.967.295 Byte) eingeben!<\/p>\n<p>Sie k\u00f6nnen allerdings auch jede Menge Unsinn eingeben, statt dem Preis in \u20ac das Tagesdatum zum Beispiel, oder auch unsinnige Werte wie &#8222;Zwofuffzig&#8220;, WordPress ist das egal. Die Nachteile hiervon liegen auf der Hand, und deswegen gibt es auch Plugins, die die Verwaltung von Custom Fields erheblich verbessen.<\/p>\n<h2>Das Plugin <a href=\"https:\/\/wordpress.org\/plugins\/custom-field-template\/\">Custom Field Template<\/a><\/h2>\n<p>Diese Plugin erm\u00f6glicht es, die Eingabebereiche von benutzerdefinierten Feldern einzugrenzen. Mit Hilfe von definierbaren Eingabefeldern, Radio-Buttons, Checkboxes usw. wird es dem Benutzer sehr vereinfacht, sinnvolle Eingaben zu machen. Das ist alles gut und sch\u00f6n und auch sehr professionell gemacht, aber mir gef\u00e4llt das alles nicht so recht, und ich sage auch gleich, warum.<\/p>\n<h2>Wer tippt den ganzen Datenhaufen ein?<\/h2>\n<p>Um mal bei dem Anwendungsbeispiel mit dem kleinen Onlineshop zu bleiben: angenommen, man legt f\u00fcr jeden Artikel einen Beitrag an, h\u00fcbsch mit Bild und kleinem Text. Dann k\u00f6nnte man ein benutzerdefiniertes Feld f\u00fcr den Preis anlegen, vielleicht noch eins f\u00fcr die Artikelnummer, und interessant w\u00e4re vielleicht auch der noch Lagerbestand, wieviele St\u00fcck noch verf\u00fcgbar sind. In einem normalen kleinen Laden hat man hierf\u00fcr zumindest eine Excel-Liste, in der man die ganzen Artikel verwaltet. So, und jetzt kommen die Custom Fields: das soll man alles per Hand einhacken? Nicht in echt, oder?<\/p>\n<p>Oder sehen wir uns mal das Mitgliederverzeichnis eines Vereins an: Miitgliedsnummer, Name, vollst\u00e4ndige Adresse, Geburtsdatum, Funktion&#8230; da gibt es jede Menge Daten, die hineingeh\u00f6ren. Und die soll man alle per Hand erfassen? Ja mir wannsd net gangst, wie man auf bairisch sagt, zu Hochdeutsch: &#8222;Das geht ja wohl gar nicht!&#8220;<\/p>\n<p>Letztes Beispiel: Bei meiner Modeldatenbank h\u00e4tte ich zu jedem Model (1 Model=1 Beitrag) sage und schreibe 34 benutzerdefinierte Felder auszuf\u00fcllen: K\u00f6rpergr\u00f6\u00dfe, Kleidergr\u00f6\u00dfe, Schuhgr\u00f6\u00dfe, Haarfarbe, Augenfarbe, Oberweite&#8230; usw. usf, was halt so alles zu einer Modelsedcard geh\u00f6rt, und das ist eine Menge Holz! Also nee echt nicht, das hacke ich da nicht per Hand rein. Schon gar nicht, weil ich die ganzen Modeldaten eh \u00fcber ein Contact Form 7-Formular erfasse und sowieso in der Datenbank gespeichert habe.<\/p>\n<p>Und bevor wir jetzt dar\u00fcber nachdenken, wie man die passenden Eintr\u00e4ge zu den benutzerdefinierten Feldern in der wp_postmeta aus unseren Excel-Listen oder MySQL-Tabellen automatisiert erzeiugen k\u00f6nnten &#8211; nicht wahr, liebe alte Programmierer, daran habt ihr sofort gedacht! Also, das machen wir NICHT. Wir machen uns das Leben deutlich einfacher.<\/p>\n<h2>Wir verwenden eigene Tabellen<\/h2>\n<p>Aber dazu gibt es definitiv einen neuen Beitrag, dieser hier ist lang genug geworden.<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Einleitung Als vor ein paar Jahren die benutzerdefinierten Felder (Custom Fields) in WordPress eingef\u00fchrt wurden, wurde das als gro\u00dfer Schritt in Richtung CMS hochgelobt und gleich mit -zig Anwendungsbeispielen unterf\u00fcttert. Benutzerdefinierte Felder sind daf\u00fcr gedacht, die Beitr\u00e4ge mit weiteren Daten anzureichern, das kann ganz unterschiedliche Anwendungen haben. Man k\u00f6nnte z.B. in einem B\u00fccherblog die ISBN-Nummer [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[18,2],"tags":[],"_links":{"self":[{"href":"https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-json\/wp\/v2\/posts\/334"}],"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=334"}],"version-history":[{"count":2,"href":"https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-json\/wp\/v2\/posts\/334\/revisions"}],"predecessor-version":[{"id":381,"href":"https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-json\/wp\/v2\/posts\/334\/revisions\/381"}],"wp:attachment":[{"href":"https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-json\/wp\/v2\/media?parent=334"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-json\/wp\/v2\/categories?post=334"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-json\/wp\/v2\/tags?post=334"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}