Tworzenie niestandardowych pól Meta Post w WordPress

Pola Meta to przydatna funkcja w WordPress, która pozwala dodać całkowicie niestandardowe dane do postu lub strony w WordPress.

Załóżmy na przykład, że tworzysz stronę internetową dla klienta, który musi wyświetlać informacje o wartościach odżywczych wraz z produktami w sklepie (co omówimy w tym poście). Możesz dodać dowolną liczbę niestandardowych pól meta do ekranów edycji postów i stron w zapleczu WordPress, zarówno dla postów, jak i niestandardowych typów postów.

Zazwyczaj niestandardowe pola meta zawierają dane i pola formularza, które umożliwiają administratorom dodawanie/edytowanie/usuwanie danych meta postów (tj. niestandardowych pól, przezwyciężając ograniczenia brzydkiego i słabego wbudowanego pola niestandardowego.

W tym samouczku pokażę Ci, jak dodać własne niestandardowe pola meta do ekranu edycji postów. Zbadamy, jak dodawać i zarządzać polami tekstowymi, przyciskami radiowymi i polami wyboru, które zapewnią użytkownikom bardziej zaawansowaną kontrolę nad metadanymi postów.

  • Co to jest Meta Box?
  • Dodawanie pola Meta
  • Drukowanie pól formularza
  • Przechowywanie Danych
  • Wrapping Up

Uwaga: przewiń w dół strony, aby pobrać bezpłatną wtyczkę z przykładu w tym samouczku.

Co to jest Meta Box?

Pole meta to przeciągalne pole wyświetlane na ekranie edycji postów w zapleczu WordPress. Użytkownicy mogą wybrać lub wprowadzić dodatkowe informacje w polach meta dodawanie do treści w obszarze edycji postu głównego.

Istnieją dwa rodzaje danych, które można wprowadzić w polach meta: metadane (tj. pola niestandardowe) i terminy taksonomiczne.

Dodawanie pola Meta

WordPress zapewnia add_meta_box funkcja o określonym celu, aby dodać nowe niestandardowe pole Meta. add_meta_box musi być wywołany z wewnątrz funkcji zwrotnej, która powinna być wykonana, gdy pola meta bieżącej strony są załadowane. Zadanie to można wykonać podłączając wywołanie zwrotne do add_meta_box_{custom-post-type} akcja hook, jak sugeruje Kodeks.

Mając to na uwadze, dodajmy następujący kod do głównego pliku wtyczki lub motywu funkcja.php pliku (pamiętając, że zawsze najlepiej jest utworzyć motyw potomny zamiast zmieniać funkcje.php plik):

Ładowanie gist fcefaf58e029a076f123c6a91a2edff5

To nasze pierwsze niestandardowe pole meta. W powyższym kodzie przekazujemy sześć argumentów do add_meta_box funkcja: identyfikator pola meta, tytuł, funkcja zwrotna, slug niestandardowego typu post (żywność), kontekst (bok) i priorytet (niskie).

Funkcja callback wydrukuje znaczniki HTML w polu meta i zdefiniujemy je w następujący sposób:

Ładowanie gist 5ebf00a60911f1592f206c079d2d32a1

Nie został jeszcze wydrukowany HTML, ale pole meta jest na swoim miejscu. Przejdźmy więc przez ten przykład bardziej szczegółowo.

empty custom meta box
ption class= “wp-caption-text” > puste niestandardowe pole meta

Po pierwsze, powinniśmy rozważyć zapewnienie bezpieczeństwa. Musimy wywołać funkcję wp_nonce_field, który tworzy pole nonce, celem jest zapewnienie, że żądanie formularza pochodzi z bieżącej strony internetowej. Dodajmy więc następujący wiersz kodu do funkcji zwrotnej:

Ładowanie gist 9c206783d31ba436e0fe78ce42bcae62

Tutaj przekazaliśmy funkcję tylko dwa z czterech przyjętych argumentów. Pierwszy z nich to nazwa akcji, tutaj ustawiona na basename bieżącego pliku, podczas gdy drugi argument to atrybut name ukrytego pola. Nawet jeśli pole nonce nie gwarantuje absolutnej ochrony, dobrą praktyką jest zawsze umieszczanie go w dowolnym niestandardowym polu meta (sprawdź Kodeks WordPress, aby uzyskać dokładniejsze wyjaśnienie).

Gdy skończymy z zabezpieczeniami, musimy pobrać z bazy danych niestandardowe wartości pól, które mają być zarządzane za pomocą pól meta box. To jest, gdzie get_post_meta funkcja jest przydatna.

W naszym przykładzie wtyczki (lub pliku funkcji, w zależności od tego, jak chcesz zaimplementować przykład w tym samouczku) używamy trzech pojedynczych pól niestandardowych, dwóch ciągów i tablicy. Poniższy kod pokazuje, jak pobrać ich wartości z bazy danych:

Ładowanie gist ab0ff76389edaf716869ad44f2065ba9

W tym przykładzie niestandardowe ślimaki pól są poprzedzone przez podkreślniki, co oznacza, że mamy do czynienia z ukrytymi niestandardowymi polami. W ten sposób nie będą one wyświetlane administratorowi w polu meta wbudowanych pól niestandardowych, ale będą edytowalne tylko z pola Meta niestandardowego.

Wreszcie nadszedł czas, aby wydrukować znaczniki.

Drukowanie pól formularza

Teraz musimy wyprodukować dane wyjściowe. Zacznijmy od dodania prostego pola tekstowego, które pozwoli administratorowi na przechowywanie wartości pojedynczego pola niestandardowego, w tym przypadku:

Ładowanie gist e0d6a60387eae9c2883f3ba022fd8736

W powyższym kodzie samo pole niestandardowe podaje wartość bieżącego elementu wejściowego. Następne pole niestandardowe będzie obsługiwane za pomocą pary przycisków radiowych:

Ładowanie gist a1ea169d0fc06334fd0dd8898eda4f42

Tutaj sprawy stają się trochę skomplikowane. Na sprawdzone funkcja porównuje dwa ciągi, które przekazaliśmy jako argumenty. Jeśli ciągi mają tę samą wartość, funkcja ustawia bieżące pole na sprawdzone.

Na koniec dodamy grupę pól wyboru do pola meta:

Ładowanie gist 9551197c02f47bb9d0f11c660dbdb2eb

Wartość nazwa atrybut odpowiada elementowi tablicy, a później pozwoli nam to na bardziej wydajne przechowywanie danych.

Teraz rozważmy pierwszy argument sprawdzone funkcja:

Ładowanie gist 1ee751c231ac0012fc61ce3d3ae666a2

Jest to operator trójdzielny, który sprawdza, czy aktualny value pola wyboru jest taka sama jak wartość $current_vitamins. Jeżeli warunek jest zweryfikowany, wtedy zwraca taką samą wartość, w przeciwnym razie zwraca pusty łańcuch.

Teraz, gdy logika powinna być jasna, możemy skrócić kod za pomocą tablicy i foreach cykl:

Ładowanie gist c759fe14a2f3e98bf97d5372c5c80d66

A teraz możemy to wszystko poskładać do kupy:

Ładowanie gist dcbd25ef2aa7cf87c43b549ddba75c86

A oto jak wygląda gotowe pole meta na ekranie edycji postu ze wszystkimi polami formularza:

Food meta box
Niestandardowe pole Meta dla typu food post

Przechowywanie Danych

Pole meta jest gotowe, ale nie można jeszcze zapisać danych. Aby wykonać to zadanie, musimy zdefiniować nową funkcję zwrotną, która będzie wywoływana podczas zapisywania posta:

Ładowanie gist 8061ca0065635ba9bbfb9ef1830aafd2

Na save_post_{$post_type} hook działa, gdy nowy $post_type jest zapisywany lub aktualizowany.

Teraz zobaczmy, co dzieje się wewnątrz funkcji. Najpierw musimy sprawdzić wartość pola nonce:

Ładowanie gist eeebb0d04e3254d1451aa4ade36dfe23

Jeśli pole nonce nie jest ustawione lub jego wartość nie jest poprawna lub wygasła, wykonanie zostanie przerwane (sprawdź kod WordPress, aby uzyskać więcej informacji na temat wp_verify_nonce).

Jeśli wolisz pominąć funkcję w przypadku automatycznego zapisywania, możemy dodać następujący warunek:

Ładowanie gist 099810f90d5bc72ba298ce4d34c4bdb9

Następnie musimy sprawdzić możliwości użytkownika:

Ładowanie gist ba590c9025a88f8d9f22750a1ed9bd66

Wreszcie możemy przechowywać dane:

Ładowanie gist fde3ed89f18ae6aadbec51b525acc58e

Jeżeli co najmniej jeden element "witaminy" tablica istnieje, wtedy $ witaminy zmienna będzie przechowywać odpowiednie wartości.Później PHP

Później PHP array_map funkcja stosuje WordPress sanitize_text_field funkcja do każdego elementu tablicy. Wreszcie, the update_post_meta funkcja przechowuje opublikowane wartości.Jeśli nie zaznaczono pola wyboru, tablica

Jeśli nie zaznaczono pola wyboru, tablica $_POST ['witaminy'] nie istnieje, a dane możemy usunąć wywołując delete_post_meta (więcej szczegółów w dokumentacji Kodeksu).

A oto Pełny kod:

php ” > Ładowanie gist 2849f9040b86888811c3b8555f80ad64

Zebrałem kod w wtyczce, którą możesz pobrać z Github i przetestować na własnej stronie internetowej lub zainstaluj localhost.

Wrapping Up

Teraz, gdy widziałeś, jak działają niestandardowe pola meta, możesz dodać dowolny rodzaj pola formularza do ekranu edycji postów w zapleczu witryny WordPress. HTML5 wprowadził dużą liczbę typów wprowadzania, którymi możemy się bawić, od pól daty po selektor kolorów.

Możesz mieć jeszcze więcej zabawy z narzędziami jQuery UI lub mashing danych z kilku usług internetowych, takich jak Google Maps API, i przechowywanie ich jako niestandardowych pól. Przykład w tym samouczku tylko zarysowuje powierzchnię, w jaki sposób można dostosować edytowanie postów.