✅ Nowości, motywy, wtyczki WEB i WordPress. Tutaj dzielimy się wskazówkami i najlepszymi rozwiązaniami dla stron internetowych.

Jak dodać niestandardowe ustawienia do istniejącego widżetu w WordPress?

5

W tym poście dowiemy się, jak dodać niestandardowy kod HTML i ustawienia do dowolnych standardowych widżetów WordPressa lub innych. Korzystając z tych ustawień, nauczymy się różnych sztuczek, jak odpowiednio manipulować zachowaniem widżetów.

Pierwsza część; dodawanie i zapisywanie ustawień niestandardowych jest dość łatwe. Druga część zależy od tego, co konkretnie chcesz zrobić i od tego, którym widżetem manipulujesz. W tym poście zamieściłem dwa przykłady; pomijanie widżetu w zależności od ustawienia (w celu dodawania ustawień w celu kontrolowania widoczności widżetu w niektórych przypadkach) oraz manipulowanie argumentami menu widżetu nawigacji WordPress. Przykład podany w drugiej części powinien dać ci dobrą wskazówkę, jak poradzić sobie z tym, co chcesz zrobić.

Dodawanie niestandardowych ustawień do dowolnego widżetu

Do dodawania własnych ustawień do istniejących widżetów używamy akcji o nazwie [in_widget_form](https://developer.wordpress.org/reference/hooks/in_widget_form/). Akcja ta dotyczy wszystkich form()funkcji widżetów, czyli funkcji odpowiedzialnej za renderowanie części administracyjnej widżetu.

Dzięki temu filtrowi otrzymujemy trzy parametry, ale tak naprawdę interesuje nas tylko pierwszy i trzeci. Pierwszą z nich jest instancja widgetu, której użyjemy do pobrania odpowiednich nazw pól i identyfikatorów oraz (opcjonalnie) sprawdzenia, do jakiego rodzaju widgetu jesteśmy podpięci. Trzeci parametr to tablica zapisanych ustawień widżetu, której musimy użyć do sprawdzenia poprzedniego zapisanego stanu naszych ustawień.

Poniższy kod doda pole wyboru z nazwą ustawienia „ awp-custom-setting". Dostosuj nazwę i kod HTML do potrzebnych danych wejściowych. Ważne jest, $widget->get_field_name()aby dodać odpowiednie identyfikatory i nameatrybuty do wszystkich danych wejściowych. Wartość twoich danych wejściowych powinna być wypełniona tym, co zostało zapisane wcześniej, i to jest coś, co znajdziesz w parametrze $instance. W przypadku pól wyboru możesz użyć funkcji WordPressa, [checked](https://developer.wordpress.org/reference/functions/checked/)()aby wyprowadzić zaznaczony atrybut.

Po dodaniu tego do kodu motywu functions.phplub wtyczki, wszystkie widżety powinny teraz otrzymać pole wyboru na końcu ich formularza w admin.

Celuj w określone widżety

Jeśli chcesz zastosować swoje ustawienia tylko do jednego lub kilku określonych widżetów, możesz porównać właściwość id_basew $widgetobiekcie. Musisz wiedzieć, jaki jest podstawowy identyfikator — jeśli nie masz pewności, po prostu wykonaj var_dump($widget->id_base)hak, zapisz i sprawdź dane wyjściowe dla każdego widżetu w admin. Na przykład widżet Nawigacja ma bazę ID nav_menu, a widżet Archiwa posiada archives.

W poniższym przykładzie sprawdzamy, czy widżet jest widżetem nawigacyjnym. Jeśli tak nie jest, funkcja jest anulowana za pomocą return. Tylko widżety nawigacyjne otrzymają niestandardowe pole wyboru:

Powinieneś uzyskać takie ustawienie w admin:

Jak dodać niestandardowe ustawienia do istniejącego widżetu w WordPress?

Tak więc ustawienie zostało dodane, jednak w tej chwili ustawienia nie są zapisywane. Naprawmy to.

Zapisywanie własnych ustawień

Musimy podłączyć się do funkcji widżetu, update()aby zaktualizować nasze niestandardowe ustawienia.

Do tego używamy filtra [widget_update_callback](https://developer.wordpress.org/reference/hooks/widget_update_callback/). Proces zapisywania naszych ustawień przebiega dokładnie tak, jak podczas pisania klasy widżetu. Filtr udostępnia trzy parametry; pierwszy to tablica instancji, która zostanie zapisana. Drugi parametr to stan, który został wysłany po zapisaniu widżetu, a trzeci to stary stan. Musimy upewnić się, że pobieramy nowe wartości z drugiego parametru i dodajemy je do pierwszego.

W ten sposób zaktualizowalibyśmy stan naszego pola wyboru; jak chcemy zapisać a truelub falsewartość:

add_filter('widget_update_callback', function($instance, $new_instance, $old_instance) { $instance['awp-custom-setting'] = isset($new_instance['awp-custom-setting']); return $instance; }, 10, 3);

Pamiętaj, aby dostosować nazwy wejść do własnych nazw ustawień. Jeśli dodajesz kilka wejść, musisz powtórzyć to dla każdego.

Teraz powinieneś zobaczyć, że twoje niestandardowe ustawienia są zapisywane w admin!

Korzystanie z zapisanych ustawień niestandardowych widżetów

Jak wspomniano wcześniej, ta część naprawdę zależy od tego, co chcesz zrobić w swoich ustawieniach. Niestety nie jest to takie proste, ponieważ większość widżetów nie dodaje filtrów ani podpięć do swoich danych wyjściowych. Zacznijmy od czegoś prostego; unikaj renderowania widżetu w zależności od ustawień.

Zapobiegaj renderowaniu widżetu w zależności od ustawień niestandardowych

Załóżmy, że dodajesz ustawienia określające, kiedy widżet powinien być widoczny; na przykład ukrywanie go w niektórych szablonach (ukrywanie w szablonie wyników wyszukiwania, ale wyświetlanie na stronie głównej i pojedyncze) lub reagowanie na inne stany WordPressa.

Do tego możemy wykorzystać filtr [widget_display_callback](https://developer.wordpress.org/reference/hooks/widget_display_callback/). Wszystko, co musimy zrobić, to sprawdzić podany parametr instancji dla naszego ustawienia i wrócić false, jeśli nie chcemy renderować widżetu.

Ten prosty kod pozwoli uniknąć renderowania widżetu, jeśli niestandardowe pole wyboru, które dodaliśmy powyżej, jest zaznaczone:

add_filter('widget_display_callback', function($instance, $widget, $args) { if ($instance['awp-custom-setting']) { return false; } return $instance; }, 10, 3);

Prawdopodobnie chcesz porównać inne stany. To prosty przykład, w którym naszym polem wyboru jest pole wyboru „Ukryj w widokach pojedynczych postów”. Po prostu sprawdzamy, czy aktualnie znajdujemy się w dowolnym widoku pojedynczego posta, [is_singular](https://developer.wordpress.org/reference/functions/is_singular/)()a jeśli pole jest zaznaczone, wracamy false.

add_filter('widget_display_callback', function($instance, $widget, $args) { if (is_singular() && $instance['awp-custom-setting']) { return false; } return $instance; }, 10, 3);

Modyfikowanie ustawień lub danych wyjściowych istniejącego widżetu

Potężnym filtrem, który można wykorzystać do zabawy z istniejącymi widżetami, jest [dynamic_sidebar_params](https://developer.wordpress.org/reference/hooks/dynamic_sidebar_params/). Zajrzyj na stronę dokumentacji, aby zobaczyć, jakie parametry możesz modyfikować. Na przykład można dodać niestandardowe klasy, zmodyfikować ciągi znaków before_widget, after_widgetlub before_titlei after_titleHTML. Dotyczy to jednak wszystkich widżetów, także admina i frontendu. A z tym filtrem nie masz dostępu do instancji widżetu (zapisane ustawienia) ani do ustawień widżetu (np. typ widżetu).

Oczywiście musimy przynajmniej sprawdzić nasze niestandardowe ustawienia. Więc musimy zrobić całkiem sporo kodu, aby pobrać potrzebne nam wartości.

Pierwszą rzeczą, jaką możemy zrobić, jest dostęp do zmiennej globalnej $wp_registered_widgets. Jest to tablica, która zawiera wszystkie zarejestrowane, dostępne widżety. Korzystając z tego rejestru, możemy użyć parametru filtra, aby znaleźć konkretny widżet, w którym aktualnie się znajdujemy. Po znalezieniu bieżącego widżetu mamy dostęp do parametrów widżetu, takich jak id_base– co, jak widzieliśmy wcześniej, mówi nam o typie widżetu.

Jak widać w kolejce #9, możemy wreszcie sprawdzić, na jakim typie widżetu aktualnie się znajdujemy. W powyższym kodzie zwracam uwagę, jeśli typ widżetu nie jest widżetem nawigacyjnym, ponieważ nasze niestandardowe ustawienie zostało dodane tylko dla tych widżetów.

Pobieranie zapisanych ustawień widżetu

Ale musimy również pobrać zapisane ustawienia dla widżetu (w tym nasze niestandardowe ustawienie). Wszystkie zapisane ustawienia widżetów są przechowywane w bazie danych opcji pogrupowanych według typu widżetu. Korzystając z właściwości w rejestrze widżetów, możemy użyć [get_option](https://developer.wordpress.org/reference/functions/get_option/)()do pobrania zapisanych ustawień dla bieżącego typu widżetu. Zwrócony będzie tablica indeksowana, w której musimy użyć jeszcze innego obwodu z filtra, aby znaleźć bieżący indeks (ponieważ możesz dodać wiele tego samego typu widżetu na tych samych lub różnych paskach bocznych). Łatwiej jest pokazać kodem niż wyjaśniać:

Wreszcie mamy zapisane ustawienia widżetu! W powyższym przykładowym kodzie, w linii #9, sprawdzamy, czy nasze niestandardowe pole wyboru jest zaznaczone.

Przykłady

W tym momencie to od Ciebie zależy, co chcesz zrobić. Możesz na przykład wyrenderować wynik po tytule widżetu, ale przed treścią widżetu:

W przypadku bardziej rzeczywistych przypadków użycia zwykle rozwiązałbyś większość, dodając określone filtry w tym momencie, wywołując add_filter()w tym momencie.

Poniżej znajduje się przykład modyfikacji argumentów menu nawigacyjnego poprzez dodanie filtra, jeśli nasze ustawienie zostało zaznaczone. Jeśli nie było zaznaczone, upewniamy się, że filtr został usunięty. Filtr służący do modyfikowania argumentów renderowania menu nawigacyjnego to widget_nav_menu_args. W poniższym kodzie zdefiniowałem funkcję do zastosowania do tego filtra, która dodaje nowy argument do argumentów menu; chodzik:

... if ($saved_settings['my-custom-thing']) { add_filter('widget_nav_menu_args', 'awp_add_menu_walker', 10, 3); } else { remove_filter('widget_nav_menu_args', 'awp_add_menu_walker', 10); } return $params; }); function awp_add_menu_walker($nav_menu_args, $nav_menu, $args) { $nav_menu_args['walker'] = new AWP_Custom_Walker(); return $nav_menu_args; }

Powyższy kod jest przykładem przypadku użycia, w którym niestandardowe pole wyboru kontroluje, czy zastosować do menu walker menu. Świetnie, jeśli chcesz, aby wszystkie menu były renderowane normalnie, ale chcesz, aby opcja dla określonych widżetów menu była renderowana inaczej. To, co walker zrobi z wyjściem menu, zależy od Ciebie.

Poniżej znajdziesz pełny kod dodawania ustawień niestandardowych do wszystkich menu nawigacyjnych, aktualizowania ich i stosowania menu walker.

Mam nadzieję, że to wystarczy, aby dowiedzieć się, jak zakodować to, co chcesz zrobić. To naprawdę zależy od tego, co chcesz zrobić i z jakim typem widżetu pracujesz. Jak wspomniano powyżej, zwykle większość modyfikacji można rozwiązać, dodając filtry, aby wykonać swoje zadanie w programie dynamic_sidebar_params.

Pełny przykład: Niestandardowe ustawienie pola wyboru w widżetach nawigacyjnych do stosowania menu walkera

Oto pełny kod dodawania niestandardowego pola wyboru do wszystkich widżetów menu nawigacyjnego WordPress w celu korzystania z zarejestrowanego chodzika po menu. (Kod chodzika nie jest wliczony w cenę)

Wniosek

Mam nadzieję, że ten post był pomocny w rozwiązywaniu twoich potrzeb lub dawał ci wskazówki, jak możesz zrobić to, co musisz zrobić!

Źródło nagrywania: awhitepixel.com

Ta strona korzysta z plików cookie, aby poprawić Twoje wrażenia. Zakładamy, że nie masz nic przeciwko, ale możesz zrezygnować, jeśli chcesz. Akceptuję Więcej szczegółów