Spis treści
Dla przypomnienia wrzucam pełen kod źródłowy na którym pracujemy. Dodam tylko, jeżeli komuś nie chce się wracać, że robimy sobie wtyczkę w której dodamy opcje wszędzie, gdzie się uda.
A uda się wszędzie… stop, bzdura. Nie uda się wszędzie, w każdym razie nie metodami WordPress Settings API a innymi, siłą rzeczy, w tym kursie nie będziemy się zajmować.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
<?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_init', function () { # jesteśmy w akcji! } ); |
Chcemy dodać jakąś opcję w sekcji „default” na stronie „general”, czyli „Ustawienia” -> „Ogólne”. To, co widzimy najczęściej, gdy klikniemy „Ustawienia”. Co tam sobie dodamy? Cokolwiek. Dajmy na to – motto strony. W oryginale jest tytuł i podtytuł a my chcemy mieć motto. No dobrze, zróbmy sobie motto. Czego będziemy potrzebować? Pola (Field) oraz jego rejestracji… Bo stronę i sekcję już mamy, prawda?
1 2 3 4 5 |
add_action( 'admin_init', function () { add_settings_field( 'to_blog_motto', '<label for="to_blog_motto">Motto bloga</label>', function ( $args ) { echo '<input name="' . $args['id'] . '" type="text" id="' . $args['id'] . '" value="' . esc_attr( get_option( $args['id'], '' ) ) . '" class="regular-text" />'; }, 'general', 'default', [ 'id' => 'to_blog_motto' ] ); } ); |
Widzimy tutaj, że używamy funkcji add_settings_field. Jak sama nazwa wskazuje, służy do tego, aby dodać pole. Przeanalizujmy sobie jej parametry:
1 2 3 4 5 6 7 8 |
add_settings_field( string $id, string $title, callable $callback, string $page, string $section = 'default', array $args = [] ) |
Ładnie to wygląda, prawda? Opiszmy sobie teraz te parametry.
$id to identyfikator naszego pola. Będzie używany jako id w <label>, jako id i name w <input> oraz, jako nazwa opcji przy pobieraniu jej przez funkcję get_option.
$title to, oczywiście, tytuł naszego pola, który będzie zapisany po lewej stronie. Dodałem <label> ponieważ to pole tekstowe i po prawej stronie nie będzie żadnego dodatkowego tekstu. Gdyby to był checkbox albo radio, prawdopodobnie label zostałby użyty z prawej strony a nie tutaj – wszystko zależy od sytuacji.
$callback to funkcja, która zostanie wywołana do wyświetlenia naszego pola. Ponownie skorzystałem z funkcji anonimowej, aby zrobić to jak najszybciej. Zwróćcie uwagę na pojawiający się argument $args w którym dostajemy ID. Zrobiłem tak, bo tak się to powinno robić (parametryzować), w tym przypadku moglibyśmy to pominąć i po prostu wpisać nasze ID.
$page to nasza strona. Pamiętacie? Ustawienia, ogólne to „general” a więc tak to wpisujemy.
$section to oczywiście sekcja. W tym przypadku mamy jedną sekcję, „default” i taka jest wartość domyślna. Moglibyśmy to pominąć, ale chcę dodać kolejny parametr, więc nie pomijam…
$args a to jest właśnie zmienna $args z funkcji wyświetlającej pole. Można sobie dodać tutaj cokolwiek, ja przekazałem ID.
Odświeżamy sobie naszą stronę i… wielkie nic. Dlaczego? Dlatego, że musimy zarejestrować nasze pole! WordPress musi wiedzieć, że chcemy z niego korzystać. Robimy to za pomocą funkcji „register_setting„:
1 |
register_setting( 'general', 'to_blog_motto' ); |
Pamiętacie? „general„, to nasza strona a „to_blog_motto” id naszego pola. Podsumowując, nasz kod wygląda teraz tak:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
<?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_init', function () { add_settings_field( 'to_blog_motto', '<label for="to_blog_motto">Motto bloga</label>', function ( $args ) { echo '<input name="' . $args['id'] . '" type="text" id="' . $args['id'] . '" value="' . esc_attr( get_option( $args['id'], '' ) ) . '" class="regular-text" />'; }, 'general', 'default', [ 'id' => 'to_blog_motto' ] ); register_setting( 'general', 'to_blog_motto' ); } ); |
A rezultat tak:
Teraz możecie wpisać motto strony i po kliknięciu „Zapisz zmiany” nasze pole też się zapisze. A jego zawartość wyświetli po odświeżeniu strony. Jeżeli chcielibyście to pole wykorzystać gdzieś na stronie, można to zrobić na przykład tak:
1 2 3 4 |
$motto = get_option('to_blog_motto', ''); if ( '' !== $motto ) { echo '<h4 class="blog_motto">' . trim( $motto ) . '</h4>'; } |
I to zadziała! A co dalej? Zapraszam do kolejnej części 🙂