Jak edytować plik functions.php w WordPress i ciekawe kody
Poradnik jest rozwinięciem Własne modyfikacje w WordPress poprzez edycję pliku functions.php.
3 sposoby na edycję pliku functions.php
Chcąc samodzielnie edytować plik functions.php możemy to zrobić używając jednego z trzech sposobów wymienionych poniżej.
Każdy motyw WordPress używa własnego pliku functions.php, który znajduje się w jego katalogu głównym.
Uwaga: Wszelkie błędnie wykonane modyfikacje pliku functions.php moga skutować problemem w działaniu strony. Dlatego należy wykonywać je z zachowaniem kopii pliku functions.php jak i najlepiej całej strony.
Edycja functions.php – Sposób 1
O ile nie mamy zablokowanej możliwości edycji plików motywu, którą często wyłącza się z przyczyn bezpieczeństwa (funkcję taką posiada m.in. opisywana przez nas wtyczka All in One WordPress Security – opisywana w poradniku Poprawa bezpieczeństwa w WordPress) najprościej modyfikację wykonać bezpośrednio z poziomu Kokpitu WordPress.
Kopia zapasowa: w tym przypadku możemy również wykonać kopiując całą zawartość pliku do notatnika, zapisując lokalnie na dysku swojego komputera, przed dokonaniem zmian.
Edycja functions.php – Sposób 2
Drugim sposobem jest edycja pliku z poziomu panelu hostingowego DirectAdmin.
Kopia zapasowa: tu możemy wykonać kopię zapasową klikając w Save As bezpośrednio w edytorze i nazwać plik jako „functions.php-kopia” zanim dokonamy jakichkolwiek zmian.
Edycja functions.php – Sposób 3
Ostatnim sposobem jest użycie Klienta FTP, np. WinSCP lub Filezilla i połączenie się z naszym serwerem. Jest to metoda dla średnio-zaawansowanych, gdyż wymaga konfiguracji takiego połączenia. Opis zamieściliśmy na naszej Wiki.
Ciekawe kody functions.php
Przedstawiamy kolejnych kilka ciekawych modyfikacji pliku functions.php
Część pierwsza dostępna jest tutaj
Uwaga: Wszelkie błędnie wykonane modyfikacje pliku functions.php moga skutować problemem w działaniu strony. Dlatego należy wykonywać je z zachowaniem kopii pliku functions.php jak i najlepiej całej strony.
O tym jak wykonać kopie zapasowe pisaliśmy również tutaj.
Pokaż nazwę używanego szablonu widoku
Przydatne, gdy pracujemy z gotowym motywem i nie znamy jego struktury, a chcemy wykonać ręczne modyfikacje.
add_action('wp_head', 'show_template'); function show_template() { global $template; echo basename($template); }
Usuń block library
Ścigamy się w Google Page Speed Insights i nie używamy Gutenberga?
function wpassist_remove_block_library_css(){ wp_dequeue_style( 'wp-block-library' ); } add_action( 'wp_enqueue_scripts', 'wpassist_remove_block_library_css' );
Usuń google reCaptcha badge
Wg. Google reCaptcha powinna się wyświetlać na każdej podstronie – jednak obniża nam to prędkość i ocenę Google, także obejściem jest usunięcie skryptów reCaptcha ze wszystkich podstron, za wyjątkiem strony z nazwą 'kontakt’.
Wartość is_page() przyjmuje Page ID, tytuł, slug, lub tablicę wspomnianych.
function oiw_disable_recaptcha_badge_page(){ if ( !is_page( array( 'kontakt' ) ) ) { wp_dequeue_script('google-recaptcha'); wp_dequeue_script('wpcf7-recaptcha'); wp_dequeue_style('wpcf7-recaptcha'); } } add_action( 'wp_enqueue_scripts', 'oiw_disable_recaptcha_badge_page' );
Mapa strony bez nazw użytkowników
Mapa strony XML zwraca również nazwy profili użytkowników? Nie używamy żadnej wtyczki do zarządzania Mapą strony? Możemy wykluczyć z niej użytkowników.
add_filter( 'wp_sitemaps_add_provider', function ($provider, $name) { return ( $name == 'users' ) ? false : $provider; }, 10, 2);
Dodaj klasę CSS do pozycji menu
W celu uzyskania większej kontroli CSS nad stylem menu naszego motywu, możemy dodać własną klasę do UL->LI.klasa_test . Każda pozycja menu będzie miała dodatkową klasę „klasa_test”, a my możemy wtedy mieć własną kotwicę aby je stylować w arkuszach styli.
function add_classes_on_li($classes, $item, $args) { $classes[] = 'klasa_test'; return $classes; } add_filter('nav_menu_css_class','add_classes_on_li',1,3);
Przydatna jest też zamiana klas w menu. Tu zamiana nazwy klasy „sub-menu” na nazwę „dropdown-menu”
function replace_submenu_class($menu) { $menu = preg_replace('/ class="sub-menu"/','/ class="dropdown-menu" /',$menu); return $menu; } add_filter('wp_nav_menu','replace_submenu_class');
Klasa aktywnej pozycji menu?
function special_nav_class ($classes, $item) { if (in_array('current-menu-item', $classes) ){ $classes[] = 'active '; } return $classes; } add_filter('nav_menu_css_class' , 'special_nav_class' , 10 , 2);
Własny widget informacyjny
Przydatne dla developerów, można podać pracownikowi klienta, dla którego wykonujemy stronę małą informację, którą zobaczy w Kokpicie WordPress.
wp_add_dashboard_widget('custom_help_widget', 'Potrzebujesz pomocy?', 'custom_dashboard_help'); } function custom_dashboard_help() { echo '<p>Potrzebujeszy pomocy w edycji bądź konfiguracji? Skontaktuj się ze mną <a href="mailto:mojemail@gmail.com">tutaj</a>.</p><p>Więcej nowości hostingowych i poradników? Odwiedź <a href="https://blog.hitme.pl" target="_blank">Blog HitMe</a>.</p>'; }
Własne logo na ekranie logowania WP
Ekran logowania do WordPress zawiera logo WP. Jeśli chcemy zbrandować panel i wymienić na nasze logo, wystarczy zmodyfikować ścieżkę do naszego pliku logo w pozycji background-image i dołączyć poniższy kod do functions.php. Możemy też użyć własnego dopisku intro.
function my_login_logo_one() { echo ' <style type="text/css"> body.login div#login h1 a { background-image: url("'.get_bloginfo("template_directory").'/img/logo/moje-logo.png"); background-size:auto; height:100px; width:auto; margin-bottom:0px; } body.login div#login h1:after{ content: "Mój włąsny tekst intro"; display: inline-block; color: #222; font-family: SANS-SERIF; text-align:right; font-size: 12px; height: 20px; width: 100%; z-index: 999999; } } </style> '; } add_action( 'login_enqueue_scripts', 'my_login_logo_one' );
Modyfikacje zostały przetestowane z WordPress w wersji 5.7.2.
Szukasz więcej ciekawych kodów WordPress?
Koniecznie zajrzyj na naszą wiki do sekcji Pomoc WordPress. Znajdziesz tam nie tylko porady dla początkujących ale i także dla developerów projektujących własne motywy WordPress.