{"id":372,"date":"2017-03-19T11:47:50","date_gmt":"2017-03-19T10:47:50","guid":{"rendered":"http:\/\/evileu.de\/zum-schwarzen-pinguin\/?p=372"},"modified":"2017-03-19T18:03:46","modified_gmt":"2017-03-19T17:03:46","slug":"mitgliederverzeichnis-mit-adressdaten","status":"publish","type":"post","link":"https:\/\/evileu.de\/zum-schwarzen-pinguin\/2017\/03\/19\/mitgliederverzeichnis-mit-adressdaten\/","title":{"rendered":"Mitgliederverzeichnis mit Adressdaten"},"content":{"rendered":"<h2>Wir basteln uns ein Mitgliederverzeichnis<\/h2>\n<p>Damit wir von unserer tabellarischen Ausgabe zu einem vern\u00fcnftigen Mitgliederverzeichnis komplett mit Fotos kommen, ist ein wenig Handarbeit angesagt, wie immer, wenn man es in WordPress mit einzelnen Beitr\u00e4gen zu tun hat. Aber keine Bange, wir machen nur das absolute Minimum. Jetzt kn\u00fcpfen wir uns die neuen Mitglieder der Reihe nach vor und legen uns zu jedem Mitglieds-Datensatz einen eigenen Beitrag an.<\/p>\n<p>Dazu folgende Vor\u00fcberlegungen:<\/p>\n<ol>\n<li>Wenn wir den Beitrag einfach mit Vorname und Name des Mitglieds betiteln, kann es zu Konflikten kommen, schlie\u00dflich k\u00f6nnen wir mehr als einen &#8222;Peter M\u00fcller&#8220; oder &#8222;Stefan Huber&#8220; in unserer Mitgliederliste haben. Also stellen wir dem Namen einfach die automatisch vergebene <strong>id<\/strong> aus der Tabelle <strong>mitglieder_stamm<\/strong> voran, dann haben wir Eindeutigkeit. Und weil unsere Mitglieder untereinander per Du sind, verzichten wir auf den Nachnamen und sparen uns Tipparbeit. Unser erster Beitrag erh\u00e4lt also den Titel &#8222;1 Ferdinand&#8220;, der zweite wird &#8222;2 Marius&#8220; hei\u00dfen, der dritte &#8222;3 Ivonne&#8220; usw., einfach der Reihe nach durch.<\/li>\n<li>Das Pa\u00dffoto laden wir als Beitragsbild hoch (rechts unten im Beitragseditor bei &#8222;Beitragsbild festlegen&#8220;), dann haben wir f\u00fcr sp\u00e4tere Ausgaben Zugriff \u00fcber darauf. Auch das haben wir schon mal gemacht, mit <strong>wp_get_attachment_url(get_post_thumbnail_id(post_ID))<\/strong><\/li>\n<li>Wir legen 1 benutzerdefiniertes Feld an, das hei\u00dft &#8222;mitglied_id&#8220; und erh\u00e4lt als Inhalt (na was wohl?) unsere eindeutige <strong>id.<\/strong><\/li>\n<\/ol>\n<div id=\"attachment_370\" style=\"width: 240px\" class=\"wp-caption alignnone\"><img aria-describedby=\"caption-attachment-370\" decoding=\"async\" loading=\"lazy\" class=\"size-full wp-image-370\" src=\"http:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-content\/uploads\/2017\/03\/mitglied_id.jpg\" alt=\"mitglied_id\" width=\"230\" height=\"152\" \/><p id=\"caption-attachment-370\" class=\"wp-caption-text\">mitglied_id<\/p><\/div>\n<p>4. Wenn wir den Beitrag f\u00fcr ein neues Mitglied vollst\u00e4ndig angelegt haben, k\u00f6nnten wir das Feld &#8222;status&#8220; in der Tabelle mitglieder_stamm von &#8222;neuzugang&#8220; auf &#8222;aktiv&#8220; stellen &#8211; jaja ich h\u00f6rs schon, das sollte man programmgesteuert mit einem Update machen, aber wir operieren hier gerade mal auf einer Handvoll Testdaten, da reicht der manuelle Eintrag. Soll ja auch nur beispielhaft zeigen, da\u00df der Bearbeitungsstand eines Mitgliederdatensatzes durch den Status mitprotokolliert werden kann.<\/p>\n<p>Das wars schon! Den Rest holen wir uns aus der Datenbank, aber ich hol mir mal einen frischen Kaffee w\u00e4hrend sie die Beitr\u00e4ge anlegen \ud83d\ude42<\/p>\n<h2>Vor\u00fcberlegung: was wollen wir im Mitgliederverzeichnis alles ausgeben?<\/h2>\n<p>Na, alles! Die kompletten Adressdaten, die sportlichen Pr\u00e4ferenzen, das Pa\u00dffoto, den ganzen Summs m\u00f6chten wir im Mitgliederverzeichnis sehen, ohne auch nur ein einziges weiteres Datenfeld manuell eingeben zu m\u00fcssen. Uns reicht das benutzerdefinierte Feld <strong>mitglied_id<\/strong>, dar\u00fcber verkn\u00fcpfen wir uns die ganze Tabelle <strong>mitglieder_stamm<\/strong> und basteln uns die gew\u00fcnschte Ausgabe.<\/p>\n<h2>Wie sieht es jetzt aus?<\/h2>\n<p>Das ist leider sehr abh\u00e4ngig vom Theme und l\u00e4\u00dft sich nicht so global sagen. Aber wenn sie jetzt auf ihre Beitragsseite gehen, m\u00fc\u00dften eigentlich die Beitragsbilder(Pa\u00dffotos) und die eingegebenen Beitragstitel (1 Ferdinand, 2 Marius&#8230;) aufgelistet werden. Manche Themes geben allerdings die Thumbnails (Beitragsbilder) in der \u00dcbersicht gar nicht mit aus. Wenn wir jetzt auf einen Beitragstitel klicken, sehen wir &#8211; nichts. V\u00f6llig korrekt, wir haben ja auch keinerlei Beitragstext eingegeben. Und unser benutzerdefiniertes Feld <strong>mitglied_id<\/strong> sehen wir auch nicht, weil es noch nicht in das Template mit eingebunden ist. Also, an die Arbeit. Wenn sie genau nachvollziehen wollen, an welcher Stelle welche Anpassungen wie greifen, w\u00e4re es sinnvoll, wenn sie das selbe Theme wie ich verwenden, es ist ein Child-Theme von <strong>Twentyfourteen<\/strong>.<\/p>\n<h2>Unsere Anpassungen an der single.php<\/h2>\n<p>F\u00fcr die Darstellung der einzelnen Beitr\u00e4ge wird die single.php verwendet, und die nehmen wir uns jetzt vor. Machen sie eine Kopie der Originaldatei, legen sie sie in ihrem Child-Theme-Ordner ab und \u00f6ffnen sie sie in einem Editor. Unsere Anpassungen erfolgen innerhalb des Loops, unmittelbar vor der Previous\/next post navigation, hier im Screenshot wirds deutlich:<\/p>\n<div id=\"attachment_375\" style=\"width: 840px\" class=\"wp-caption alignnone\"><img aria-describedby=\"caption-attachment-375\" decoding=\"async\" loading=\"lazy\" class=\"size-full wp-image-375\" src=\"http:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-content\/uploads\/2017\/03\/innerhalb_des_loops.jpg\" alt=\"innerhalb_des_loops\" width=\"830\" height=\"507\" srcset=\"https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-content\/uploads\/2017\/03\/innerhalb_des_loops.jpg 830w, https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-content\/uploads\/2017\/03\/innerhalb_des_loops-300x183.jpg 300w, https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-content\/uploads\/2017\/03\/innerhalb_des_loops-768x469.jpg 768w, https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-content\/uploads\/2017\/03\/innerhalb_des_loops-624x381.jpg 624w\" sizes=\"(max-width: 830px) 100vw, 830px\" \/><p id=\"caption-attachment-375\" class=\"wp-caption-text\">innerhalb_des_loops<\/p><\/div>\n<p>Geben sie hier mal zum Testen nur die einzige Echo-Zeile ein und schauen sie sich einen Beitrag an, da darf nichts stehen ausser dem Text des echo.<\/p>\n<h2>Wie kriegen wir jetzt unsere Stammdaten hier rein?<\/h2>\n<p>\u00dcber eine Verkn\u00fcpfung mit der Tabelle <strong>mitglieder_stamm<\/strong> \u00fcber das benutzerdefinierte\u00a0 Feld <strong>mitglied_id.<\/strong> Wir geben als allererstes mal nur die mitglied_id aus, das machen wir so:<\/p>\n<pre>echo \"&lt;h2&gt;Mitgliederdaten&lt;\/h2&gt;\";\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0$akt_mitglied_id = get_post_meta($post-&gt;ID, 'mitglied_id', true);\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0echo \"Aktuelle Mitglied ID:&amp;nbsp\".$akt_mitglied_id.\"&lt;br&gt;\";<\/pre>\n<p>Der Witz steckt nat\u00fcrlich in der Funktion get_post_meta, die holt uns zur aktuellen WordPress-ID des Beitrags den Wert des benutzerdefinierten Feldes mit dem Namen &#8222;mitglied_id&#8220;. Das &#8222;true&#8220; bewirkt, da\u00df ein einzelner String ausgegeben wird, mehr brauchen wir nicht.<\/p>\n<p>Jetzt m\u00fcssen wir noch angeben, aus welcher Tabelle wir die Daten holen wollen, dazu lege ich den Tabellennamen wieder auf eine Konstante, damit man ihn sp\u00e4ter leicht auswechseln kann, und g\u00f6nne mir noch eine Debug-Ausgabe.<\/p>\n<pre>\/*****Haupttabelle Name als Konstante definieren*******\/\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0define(\"MAINTABLE\",\"mitglieder_stamm\");\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0echo \"Aktuelle Tabelle =&amp;nbsp\".MAINTABLE.\"&lt;br&gt;\";<\/pre>\n<p>Und jetzt haben wir schon alles, was wir f\u00fcr unseren Select brauchen! Der sieht so aus:<\/p>\n<pre><em>$alleposts = $wpdb-&gt;get_results( \"SELECT * from \".MAINTABLE.\"<\/em>\r\n <em>WHERE id = '\".$akt_mitglied_id.\"'\");<\/em><\/pre>\n<p>Und schon haben wir den richtigen Datensatz anhand der Mitglieds-id herausgefischt! Die Ausgabe der einzelnen Felder erfolgt dann wie gehabt wieder mit einer Foreach-Schleife, ich gebe hier mal beispielhaft nur ein paar Felder aus:<\/p>\n<pre>foreach ( $alleposts as $einpost ) { \u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0echo $einpost-&gt;vorname.\"&lt;br&gt;\";\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0echo $einpost-&gt;nachname.\"&lt;br&gt;\";\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0echo $einpost-&gt;ort.\"&lt;br&gt;\";\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0echo $einpost-&gt;strassehausnummer.\"&lt;br&gt;\";\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0}<\/pre>\n<h2>Das Ergebnis<\/h2>\n<p>&#8230;ist noch nicht besonders h\u00fcbsch formatiert, aber es zeigt das Prinzip:<\/p>\n<div id=\"attachment_376\" style=\"width: 571px\" class=\"wp-caption alignnone\"><img aria-describedby=\"caption-attachment-376\" decoding=\"async\" loading=\"lazy\" class=\"size-full wp-image-376\" src=\"http:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-content\/uploads\/2017\/03\/maja_daten.jpg\" alt=\"maja_daten\" width=\"561\" height=\"480\" srcset=\"https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-content\/uploads\/2017\/03\/maja_daten.jpg 561w, https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-content\/uploads\/2017\/03\/maja_daten-300x257.jpg 300w\" sizes=\"(max-width: 561px) 100vw, 561px\" \/><p id=\"caption-attachment-376\" class=\"wp-caption-text\">maja_daten<\/p><\/div>\n<p>Am sch\u00f6nsten s\u00e4he es nat\u00fcrlich aus, wenn man die Stammdaten tabellarisch ausgibt, aber das kann sich jeder selber einrichten wie er es m\u00f6chte. Jedenfalls haben wir \u00fcbere unsere Verkn\u00fcpfung mit der <strong>mitglied_id<\/strong> Zugriff auf alle Datenfelder der Tabelle <strong>mitglieder_stamm<\/strong>, und das war ja genau das, um was es ging. So simpel ist die L\u00f6sung mit einer eigenen Tabelle f\u00fcr die Mitgliederdaten!<\/p>\n<h2>Klarer Vorteil gegen\u00fcber den benutzerdefinierten Feldern<\/h2>\n<p>Ausser der <strong>mitglied_id<\/strong> mu\u00df im Beitrag nichts per Hand eingegeben werden, das erspart einem einen Haufen (fehlertr\u00e4chtiger) Handarbeit. Stellen sie sich nur mal vor, sie m\u00fc\u00dften jetzt zu allen Mitgliedern die vollst\u00e4ndigen Adressdaten h\u00e4ndisch in Custom Fields erfassen &#8211; also nee, echt nicht. Das haben wir eleganter gel\u00f6st. Und wenn es mal \u00c4nderungen an den Benutzerdaten geben sollte, auch die k\u00f6nnen wir in unser eigenen Tabelle <strong>mitglieder_stamm<\/strong> einpflegen, wir m\u00fcssen dazu nicht den entsprechenden Beitrag bearbeiten. Auch das ist ein weiterer Vorteil, der nicht zu untersch\u00e4tzen ist. Man kann sich auch mit PHP einen kleinen Mitgliederdaten-Editor basteln, vielleicht mach ich das sp\u00e4ter mal, das f\u00fchrt jetzt wirklich zu weit. Und jetzt viel Vergn\u00fcgen beim individuellen Einbinden und Formatieren ihrer Felder!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Wir basteln uns ein Mitgliederverzeichnis Damit wir von unserer tabellarischen Ausgabe zu einem vern\u00fcnftigen Mitgliederverzeichnis komplett mit Fotos kommen, ist ein wenig Handarbeit angesagt, wie immer, wenn man es in WordPress mit einzelnen Beitr\u00e4gen zu tun hat. Aber keine Bange, wir machen nur das absolute Minimum. Jetzt kn\u00fcpfen wir uns die neuen Mitglieder der Reihe [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[1,19,18,20,11,7,4,2],"tags":[],"_links":{"self":[{"href":"https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-json\/wp\/v2\/posts\/372"}],"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=372"}],"version-history":[{"count":7,"href":"https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-json\/wp\/v2\/posts\/372\/revisions"}],"predecessor-version":[{"id":384,"href":"https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-json\/wp\/v2\/posts\/372\/revisions\/384"}],"wp:attachment":[{"href":"https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-json\/wp\/v2\/media?parent=372"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-json\/wp\/v2\/categories?post=372"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-json\/wp\/v2\/tags?post=372"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}