Tworzę widżet, musi przechowywać około 10 identyfikatorów. Obecnie używam następującej metody pola do przechowywania każdego identyfikatora w osobnym polu. Przechowuje dane z każdego pola osobno w wordpress. Czy możliwe jest przechowywanie danych wszystkich pól w jednym wierszu w wordpressie dla przykładowego użycia tablicy?
<input
class="widefat"
id="<?php echo $this->get_field_id('item1_id'); ?>"
name="<?php echo $this->get_field_name('item1_id'); ?>"
value="<?php echo $instance['item1_id']; ?>"
/>
<input
class="widefat"
id="<?php echo $this->get_field_id('item2_id'); ?>"
name="<?php echo $this->get_field_name('item2_id'); ?>"
value="<?php echo $instance['item2_id']; ?>"
/>
$instance
jest tablicą i zawiera wszystkie wartości. A co rozumiesz przez „przechowywanie danych wszystkich pól w jednym wierszu”? Miałeś na myśli jeden wiersz bazy danych?Odpowiedzi:
Musisz zebrać wiele pól pod tą samą nazwą jak ta…
… I dostosuj do tego logikę swojego widgetu.
Oto bardzo prosty widżet demonstracyjny:
Backend
Frontend
źródło
printf
składniaclass="widefat"
pól.Powyższa odpowiedź jest dobra, jeśli chcesz numerować pola. W moim przypadku nie. Mam widżet z opcjami, które pozwalają użytkownikowi wybrać dowolną liczbę kategorii do użycia w widgecie.
Oto mój widget
form
. - Trzy ważne rzeczy tutajarray()
jeśli wartość widżetu nie jest ustawiona<label>
name
atrybucie formularza zauważ, że dołączam[]
na końcu. To mówi PHP, że przesyłam tablicę wartości tego klucza<label><input type="checkbox" ...></label>
. - Każde z naszych pól wyboru nie będzie miało unikalnegoid
atrybutu, więc<label>
for
atrybut nie będzie działał. Możemy wygenerować unikalne identyfikatory, ale to jest kłopot. Jeśli po prostu owiniesz etykietę wokół wejścia, etykieta zostanie poprawnie skojarzona bez kłopotów z podłączeniemfor
+id
Teraz kod
A oto moja funkcja aktualizacji
Chcę zapisać identyfikatory kategorii w tablicy, które są liczbami, więc używam
array_map
z,intval
aby upewnić się, że wszystkie przesłane dane są poprawnymi liczbami całkowitymi. Ponadto używamarray_filter
do usuwania wszelkich nieprawidłowych zgłoszeń.Opisanie tego WordPressa jest szczególnie trudne. Jeśli masz jakieś pytania, chętnie się rozwinę.
źródło