Support » Allgemeine Fragen » Update_post_meta für ein array
Update_post_meta für ein array
-
Hi Leute,
ich versuche gerade Informationen aus einer Meta Box mittels eines Hooks „save_post“ und einer funktion „update_post_meta“ zu speichern. Das funktioniert auch für einzelne normale Input-Felder wie z.B. Name sehr gut. Probleme habe ich jedoch bei arrays die mittels JavaScript live erweitert werden.
In der Praxis: ich möchte ein Plugin um Zutaten für ein Rezept einzufügen. Der User soll im Backend die Möglichkeit haben auf ein Plus zu drücken und dann erscheinen drei Felder: Menge, Einheit, Zutat. Mit einem weiteren Plus sollen weitere Felder gespeichert werden. Nun ist die Frage wie speichere ich das ganze?
Das Problem: Normale Felder werden gespeichert. Wie speichere ich das ganz jedoch als array so dass WP sich merkt ah da waren jetzt 8 Zutaten, ich muss 8 Zutaten aufrufen. Gehe ich das ganze vielleicht falsch an?
Grüße und danke für jede Hilfe.
Hier ist mein Script mit den Eingabefelder und dem JavaScript Code
<?php echo "<h3>Zutaten:</h3>\n<table><tr ><td>Menge</td>\n<td>Einheit</td>\n<td>Zutat</td>\n</tr>"; echo '<tr id="zutaten"><td><input name="Menge[]"></td><td><input name="Einheiten[]"></td>'; echo '<td><input name="Zutat[]"></td>'; echo "</tr>\n</table>\n<br />"; ?> <script type="text/javascript"> (function(){ var zutaten = document.getElementById("zutaten"); zutaten.id = ""; var table = zutaten.parentNode; table.removeChild(zutaten); function appendRow(){ var newRow = zutaten.cloneNode(true); var deleteCell = document.createElement("td"); newRow.appendChild(deleteCell); var deleteButton = document.createElement("button"); deleteButton.type = "button"; deleteButton.className = "minus"; deleteButton.innerHTML = "−"; deleteButton.addEventListener("click", function(){ table.removeChild(newRow); }, false); deleteCell.appendChild(deleteButton); table.insertBefore(newRow, addRow); } var addRow = document.createElement("tr"); var addCell = document.createElement("td"); addCell.colSpan = zutaten.childNodes.length + 1; addRow.appendChild(addCell); addButton = document.createElement("button"); addButton.type = "button"; addButton.className = "plus"; addButton.innerHTML = "+"; addButton.addEventListener("click", appendRow, false); addCell.appendChild(addButton); table.appendChild(addRow); appendRow(); }()); </script>
Hier ist mein Script für den Hook und für update_post_meta();
<?php add_action ('save_post','recipe_save'); function recipe_save ($post_id){ if (isset($_POST['Menge[]'])){ update_post_meta($post_id, 'Menge[]', $_POST['Menge[]']); } } ?>
- Dieses Thema wurde geändert vor 7 Jahren, 3 Monaten von juicylung.
-
Leider kann ich nichts mehr am ersten Beitrag ändern, deswegen hier ein zweiter Post.
Zum Verständnis. Das Inputfeld habe ich absichtlich soweit abgespeckt, damit man sieht was ich meine.
In WP selbst rufe ich natürlich mit get_post_meta die jeweilige ID und die Variable auf:echo '<input name="Menge[]" class="form-control" value="'.esc_html(get_post_meta($post->ID, 'Menge[]'. false )).'"></td>';
Lässt sich das vielleicht einfach nicht lösen, weil die Felder mit JavaScript generiert werden? Wie könnte ich das alternativ lösen?
- Diese Antwort wurde geändert vor 7 Jahren, 3 Monaten von juicylung.
Gibt es hier keine einfache Möglichkeit?
Hat jemand eine Hinweis wie ich mich an die Lösung machen könnte?
Ich habe gerade nicht die Zeit den Code zu nehmen und eine Lösung zu bauen, aber ich würde mir Plugins anschauen, die das können. Metabox.io, CMB2 oder ACF können Felder klonen und befüllen, auch als Gruppe (denke ich). Daher könntest du, dank GPL, die Lösung aus diesen Plugins bestimmt abschauen oder zumindest Ideen dort finden, wie das gehen könnte.
Gruß, Torsten
Hey Torsten nicht falsch verstehen, ich will was lernen und nicht eine vorgeschriebene Lösung bekommen ;), also musst du deine Zeit dafür nicht opfern. Der Tipp mit den Plugins ist für mich schonmal ein Schritt weiter, ich werde mal gucken ob ich da durchblicken kann.
Für mich als Anfänger ( erst Mitte Dezember mit PHP und WP angefangen) ist es schonmal eine Hilfe zu wissen, dass das überhaupt möglich ist.Danke vorerst 😉
- Das Thema „Update_post_meta für ein array“ ist für neue Antworten geschlossen.