strona z ustawieniami w wordpress

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');
}
Ask ChatGPT
Set ChatGPT API key
Find your Secret API key in your ChatGPT User settings and paste it here to connect ChatGPT with your Tutor LMS website.
Scroll to Top