Strona z ustawieniami w panelu admin wordpress

Tworzymy nowy plik php wewnątrz folderu inc o nazwie function-admin.php

Dołączamy tę stronę w pliku functions.php za pomocą metody require:

require get_template_directory(). '/inc/function-admin.php';

W pliku function-admin.php dodajemy nową stronę

<?php

function pikademia_add_admin_page(){
    add_menu_page(
        'Pikademia opcje',  // tytuł strony
        'Pikademia',        // tytuł menu widoczny w admin!!!
        'manage_options',   // capability
        'pikademia_motyw',  //id !!!
        'pikademia_create_page',    //callback func. do utworzenia !!!!
        'dashicons-palmtree',       //ikona
        110                 //położenie w menu
    );
}
add_action('admin_menu','pikademia_add_admin_page');

function pikademia_create_page(){
    echo '<h1>Ustawienia motywu Pikademia</h1>';
}

Nr określające położenie w menu znajdziecie tutaj: https://developer.wordpress.org/reference/functions/add_menu_page/

Dodanie funkcji, która zarejestruje ustawienia
register_setting() tworzy jedno z ustawień, w naszym przypadku podajemy nazwę grupy, a następnie id danego pola do którego będziemy się później odnosić

function pikademia_custom_settings(){
    register_setting(
        'pikademia-settings-group', // nazwa grupy opcji, do której się donosimy w funkcji settings_fields()
        'first_name'                // id opcji !!!!
    );
}
add_action('admin_init', 'pikademia_custom_settings');

Teraz wewnątrz funkcji pikademia_custom_settings() dodajemy kolejną metodę  add_settings_section(), która stworzy sekcję dla ustawień. Wraz z tym musimy stworzyć callback function, która może coś wyświetlić, ale nie musi. Wraz z powyższym kodem wygląda to następująco:

function pikademia_custom_settings(){
    register_setting(
        'pikademia-settings-group', // nazwa grupy opcji, do której się donosimy w funkcji settings_fields()
        'first_name'                // id opcji !!!!
    );
    add_settings_section(
        'pikademia-myoptions',  // id slug do identyfikacji sekcji w metodzie add_settings_field() !!!!
        'Opcje sekcji 1',       // wyświetlany tytuł, może być pusty
        'pikademia_options',    // callback function do utworzenia !!!
        'pikademia_motyw'       // id strony na której dodajemy sekcję(pobieramy z funkcji pikademia_add_admin_page)!!!
    );
}
add_action('admin_init', 'pikademia_custom_settings');

function pikademia_options(){
    // echo "Sekcja z ustawieniami";
}

Teraz wewnątrz funkcji pikademia_custom_settings() dodajemy kolejną metodę add_settings_field(), która stworzy konkretne pole. Wraz z tym musimy stworzyć callback function, która wyświetli pole na stronie. Wraz z powyższym kodem wygląda to następująco:

function pikademia_custom_settings(){
    register_setting(
        'pikademia-settings-group', // nazwa grupy opcji, do której się donosimy w funkcji settings_fields()
        'first_name'                // id opcji !!!!
    );
    add_settings_section(
        'pikademia-myoptions',  // id slug do identyfikacji sekcji w metodzie add_settings_field() !!!!
        'Opcje sekcji 1',       // wyświetlany tytuł, może być pusty
        'pikademia_options',    // callback function do utworzenia !!!
        'pikademia_motyw'       // id strony na której dodajemy sekcję(pobieramy z funkcji pikademia_add_admin_page)!!!
    );
    add_settings_field(
        'pole-nazwa',   // id
        'Imię',         // wyświetlany tytuł pola !!
        'pikademia_settings_field', //function callback do utworzenia !!!
        'pikademia_motyw', //id strony !!!
        'pikademia-myoptions' //section id z metody add_settings_section !!!
    );
}
add_action('admin_init', 'pikademia_custom_settings');

function pikademia_options(){
    // echo "Sekcja z ustawieniami";
}
function pikademia_settings_field(){
    $firstname = esc_attr(get_option('first_name'));
    echo '<input type="text" name="first_name" value="'.$firstname.'" placeholder="First name"/>';
   echo '<p class="description"> Podaj swoje imię </p>';
}

Dopisujemy kilka ważnych rzeczy do pierwszej funkcji, która tworzy stronę, tak, aby zawrzeć w niej wszystko co stworzyliśmy podając jako argumenty odpowiednie id.

function pikademia_create_page(){
    echo '<h1>Ustawienia motywu Pikademia</h1>';
    settings_errors();
    echo '<form method="post" action="options.php">';
    settings_fields('pikademia-settings-group');
    do_settings_sections('pikademia_motyw');
    submit_button();
    echo '</form>';
    echo 'Odwiedź nas na <a href="https://www.pikademia.pl/">www.pikademia.pl</a>';
}

Użycie wartości z ustawień

Ustawienia takie są zapisywane w bazie danych w tabeli wp_options. W kolumnie option_name zapisze się id ustawienia (czyli first_name), a w kolumnie value wpisana i zapisana wartość.
W kodzie możemy pobrać zapisaną wartość za pomocą metody get_option(’first_name’), podając jako argument id opcji.

Aby dodać drugie pole, np. z nazwiskiem wystarczy powielić register_setting() i add_settings_field() oraz dodać funkcję podaną w add_settings_field().

Jeśli chodzi o imię i nazwisko moglibyśmy zrobić to jeszcze krócej dodając tylko funkcję register_setting() i uzupełniając funkcję pikademia_settings_field() o pole z nazwiskiem, np;

<?php

function pikademia_add_admin_page(){
    add_menu_page(
        'Pikademia opcje',  // tytuł strony
        'Pikademia',        // tytuł menu widoczny w admin!!!
        'manage_options',   // capability
        'pikademia_motyw',  // page id !!!
        'pikademia_create_page',    //callback func. do utworzenia !!!!
        'dashicons-palmtree',       //ikona
        110                 //położenie w menu
    );
}
add_action('admin_menu','pikademia_add_admin_page');

function pikademia_create_page(){
    
    echo '<h1>Ustawienia motywu Pikademia</h1>';
    settings_errors();
    echo '<form method="post" action="options.php">';
    settings_fields('pikademia-settings-group');
    do_settings_sections('pikademia_motyw');
    submit_button();
    echo '</form>';
    echo 'Odwiedź nas na <a href="https://www.pikademia.pl/">www.pikademia.pl</a>';
}

function pikademia_custom_settings(){
    register_setting(
        'pikademia-settings-group', // nazwa grupy opcji, do której się donosimy w funkcji settings_fields()
        'first_name'                // id opcji !!!!
    );
    register_setting(
        'pikademia-settings-group', // nazwa grupy opcji, do której się donosimy w funkcji settings_fields()
        'last_name'                // id opcji !!!!
    );
    add_settings_section(
        'pikademia-myoptions',  // id slug do identyfikacji sekcji w metodzie add_settings_field() !!!!
        'Opcje sekcji 1',       // wyświetlany tytuł, może być pusty
        'pikademia_options',    // callback function do utworzenia !!!
        'pikademia_motyw'       // id strony na której dodajemy sekcję(pobieramy z funkcji pikademia_add_admin_page)!!!
    );
    add_settings_field(
        'pole-nazwa',   // id
        'Imię i nazwisko',         // wyświetlany tytuł pola !!
        'pikademia_settings_field', //function callback do utworzenia !!!
        'pikademia_motyw', //id strony !!!
        'pikademia-myoptions' //section id z metody add_settings_section !!!
    );

}
add_action('admin_init', 'pikademia_custom_settings');

function pikademia_options(){
    // echo "Sekcja z ustawieniami";
}
function pikademia_settings_field(){
    $firstname = esc_attr(get_option('first_name'));
    echo '<input type="text" name="first_name" value="'.$firstname.'" placeholder="First name"/>';
    $lastname = esc_attr(get_option('last_name'));
    echo '<input type="text" name="last_name" value="'.$lastname.'" placeholder="Last name"/>';
}

Pełny kod do utworzenia 2 pól

<?php

function pikademia_add_admin_page(){
    add_menu_page(
        'Pikademia opcje',  // tytuł strony
        'Pikademia',        // tytuł menu widoczny w admin!!!
        'manage_options',   // capability
        'pikademia_motyw',  // page id !!!
        'pikademia_create_page',    //callback func. do utworzenia !!!!
        'dashicons-palmtree',       //ikona
        110                 //położenie w menu
    );
}
add_action('admin_menu','pikademia_add_admin_page');

function pikademia_create_page(){
    echo '<h1>Ustawienia motywu Pikademia</h1>';
    settings_errors();
    echo '<form method="post" action="options.php">';
    settings_fields('pikademia-settings-group');
    do_settings_sections('pikademia_motyw');
    submit_button();
    echo '</form>';
    echo 'Odwiedź nas na <a href="https://www.pikademia.pl/">www.pikademia.pl</a>';
}

function pikademia_custom_settings(){
    register_setting(
        'pikademia-settings-group', // nazwa grupy opcji, do której się donosimy w funkcji settings_fields()
        'first_name'                // id opcji !!!!
    );
    add_settings_section(
        'pikademia-myoptions',  // id slug do identyfikacji sekcji w metodzie add_settings_field() !!!!
        'Opcje sekcji 1',       // wyświetlany tytuł, może być pusty
        'pikademia_options',    // callback function do utworzenia !!!
        'pikademia_motyw'       // id strony na której dodajemy sekcję(pobieramy z funkcji pikademia_add_admin_page)!!!
    );
    add_settings_field(
        'pole-nazwa',   // id
        'Imię',         // wyświetlany tytuł pola !!
        'pikademia_settings_field', //function callback do utworzenia !!!
        'pikademia_motyw', //id strony !!!
        'pikademia-myoptions' //section id z metody add_settings_section !!!
    );

    register_setting(
        'pikademia-settings-group', // nazwa grupy opcji, do której się donosimy w funkcji settings_fields()
        'last_name'                // id opcji !!!!
    );
    add_settings_field(
        'pole-nazwisko',   // id
        'Nazwisko',         // wyświetlany tytuł pola !!
        'pikademia_settings_field_nazwisko', //function callback do utworzenia !!!
        'pikademia_motyw', //id strony !!!
        'pikademia-myoptions' //section id z metody add_settings_section !!!
    );
}
add_action('admin_init', 'pikademia_custom_settings');

function pikademia_options(){
    // echo "Sekcja z ustawieniami";
}
function pikademia_settings_field(){
    $firstname = esc_attr(get_option('first_name'));
    echo '<input type="text" name="first_name" value="'.$firstname.'" placeholder="First name"/>';
}
function pikademia_settings_field_nazwisko(){
    $lastname = esc_attr(get_option('last_name'));
    echo '<input type="text" name="last_name" value="'.$lastname.'" placeholder="Last name"/>';
}

Możemy też utworzyć dodatkowe pliki php i wstawić do nich poszczególne porcje kodu, np. zawartość funkcji pikademia_custom_settings(), która staje się dość długa. Możemy np. stworzyć plik pikademia-custom-settings.php, wewnątrz folderu inc, przenieść do niego zawartość funkcji, a wewnątrz funkcji dodać odwołanie do pliku:

function pikademia_custom_settings(){
    require_once(get_template_directory().'/inc/pikademia-custom-settings.php');
}
Scroll to Top