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');
}