Spis treści
Zazwyczaj jest tam „Dostosuj” i „Edytor motywu” – co najmniej. Bywa, że jest więcej. „Widgety”, „Menu”, „Tło”… zależy co tam nasz motyw obsługuje. A jeżeli budujemy specjalistyczny motyw i ma on opcje, które nie mieszczą się w żadnej z tych kategorii? Oczywiście, stworzymy swoją własną podstronę. I ponownie, zaczniemy od „czystej” wtyczki.
Dodajemy podstronę
Oczywiście, że tak. Dokładnie od tego zaczniemy. Zresztą… dobrze, nie chcę przedłużać ani robić z tego wiedzy tajemnej, szczególnie, że na pewno większość z Was się już domyśliła. Weźmiemy sobie kod z poprzedniego wpisu i wprowadzimy w nim jedną (JEDNĄ!) zmianę. Naprawdę, tak niewiele trzeba… kto zauważy, gdzie jest ta zmiana?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
<?php /* Plugin Name: Test opcje Plugin URI: https://wpkurs.pl/ Description: Wtyczka, która pokazuje jak stworzyć Ustawienia za pomocą WordPress API Author: Łukasz Nowicki Version: 0.1.1 Author URI: https://lukasznowicki.info/ Requires at least: 5.4 Tested up to: 5.4 Requires PHP: 7.4 */ add_action( 'admin_menu', function () { add_submenu_page( 'themes.php', 'Test opcje - ustawienia', 'Test opcje', 'manage_options', 'testopcje', function () { ?> <div class="wrap"> <h2><?php echo get_admin_page_title(); ?></h2> <p class="description">Tutaj parę słów wstępu na temat naszej super wtyczki i opcji, które prezentujemy użytkownikom.</p> <hr> <form method="post" action="options.php"> <?php settings_fields( 'testopcje' ); do_settings_sections( 'testopcje' ); submit_button(); ?> </form> </div> <?php }, 99 ); } ); add_action( 'admin_init', function () { add_settings_section( 'sekcja1', 'Sekcja nr 1', function () { echo '<p>W pierwszej sekcji mamy takie opcje, że hej!</p>'; }, 'testopcje' ); add_settings_field( 'opcja1', '<label for="opcja1">Opcja nr 1</label>', function () { echo '<input id="opcja1" name="opcja1" value="' . esc_attr( get_option( 'opcja1', '' ) ) . '" type="text">'; }, 'testopcje', 'sekcja1' ); register_setting( 'testopcje', 'opcja1' ); add_settings_section( 'sekcja2', 'Sekcja nr 2', function () { echo '<p>A w drugiej sekcji wiele się nie zmieniło, prawdę mówiąc.</p>'; }, 'testopcje' ); add_settings_field( 'opcja2', '<label for="opcja2">Opcja nr 2</label>', function () { echo '<input id="opcja2" name="opcja2" value="' . esc_attr( get_option( 'opcja2', '' ) ) . '" type="text">'; }, 'testopcje', 'sekcja2' ); register_setting( 'testopcje', 'opcja1' ); register_setting( 'testopcje', 'opcja2' ); } ); |
Oczywiście! Jedyna zmiana znajduje się w linijce nr 15. Tam, zamiast strony „rodzica” (było: options-general.php) wprowadzamy themes.php, co oznacza, że „rodzicem” tej podstrony jest „Wygląd” właśnie. I to wszystko! Koniec zmian. Cały kod działa idealnie i bez zarzutu. Głównie dlatego, że korzystamy z Settings API WordPressa. Gdybyśmy tworzyli swoje autorskie rozwiązanie, przenosiny nie byłyby wcale takie łatwe. No chyba, że poświęcilibyśmy sporo czasu na stworzenie przenośnego kodu, którego funkcjonalność sprowadziła by się do… tak, do istniejącego już API. Settings API konkretnie 🙂 Tak że byłaby to robota całkowicie niepotrzebna.
Wygląda to tak:
Widoczna zmiana (poza oczywistą, przenieśliśmy się do innego menu) to fakt, że nasza podstrona nie jest ostatnia, jak to było w menu „Ustawienia”. I nie będzie, choćbyśmy jako $position ustawili 9999999999, ponieważ WordPress celowo, jako ostatnią pozycję, wstawia edytor motywów.
Teraz to już chyba… nie, nadal nie wszystko. Ale będzie coraz szybciej i łatwiej, obiecuję.