Найкращі скрипти, сніпети, хуки, хаки, трюки для файлу functions.php WordPress [!ОНОВЛЮЄТЬСЯ!]
Привіт:) У цьому пості я зібрав корисні сніпети та трюки для functions.php — головного файлу будь-якої теми WordPress. Для зручності відсортував за тематикою та областю застосування.
- Вимкнути Gutenberg для віджетів
- Як перевірити, що ми знаходимося у користувацькій частині сайту
- Заборона автоматичного редиректу, який робить WordPress якщо змінюється слаг посту
- Як визначити сторінку блогу (архіву записів)
- Як визначити сторінку блогу (архіву записів) або сторінку посту
- Як додати користувацькі типи записів (CPT) у пошук
- Як для всіх сторінок сайту у тег <html> додати власний атрибут
- Як організувати пошук на всьому сайті виключно за вказаними постами/сторінками
- Змінити стандартні написи у формі коментування
- Додати кнопку розриву сторінки у візуальний редактор TinyMCE
- Як програмно вимкнути архіви
- Як автоматично додати атрибут lightbox посиланням на зображення
- Як завантажувати бібліотеку jQuery із Google CDN
- Контент у редакторі Gutenberg за замовчуванням при створенні нової публікації
- Як вивести на екран текст копірайту із поточним роком
- Як автоматично вставити власний (кастомний) вміст перед основним контентом запису/сторінки
- Як автоматично вставити власний (кастомний) вміст після основного контенту запису/сторінки
- Як автоматично вставити власний (кастомний) вміст після заголовку запису/сторінки
- Як автоматично вставити власний (кастомний) вміст після конкретного параграфу запису/сторінки
- Перевірка чи переглядає сайт користувач із правами Адміністратора
- Як увімкнути режим розробки (Maintenance Mode)
- Як дозволити завантажувати файли SVG через Медіабібліотеку
- Інші корисні сніпети для functions.php
Вимкнути Gutenberg для віджетів
/**
* Disable Gutenberg in Widgets
*/
add_filter( 'gutenberg_use_widgets_block_editor', '__return_false' );
add_filter( 'use_widgets_block_editor', '__return_false' );
Як перевірити, що ми знаходимося у користувацькій частині сайту
if ( ! is_admin() && ! current_user_can( 'manage_options' ) ) {
// знаходимося у користувацькій частині сайту
}
Заборона автоматичного редиректу, який робить WordPress якщо змінюється слаг посту
Кожна публікація WordPress має унікальний слаг (slug), який автоматично генерується за назвою вашої публікації або прописується вручну в редакторі. Якщо в опублікованому пості чи сторінці змінити цей слаг, WordPress запам’ятає старий і перенаправить його на новий. Щоб заборонити таку дію, виконайте 2 дії.
- Видаліть із бази даних архів старих слагів через наступний SQL-запит
DELETE FROM `wp_postmeta` WHERE `meta_key` = '_wp_old_slug';
- У файл functions.php вставте код:
/**
* Removing the redirect after changing a post/pages slug
*/
remove_action( 'template_redirect', 'wp_old_slug_redirect' );
remove_action( 'post_updated', 'wp_check_for_changed_slugs', 12, 3 );
до змісту ↑Як визначити сторінку блогу (архіву записів)
Якщо є статична сторінка, яка вказана у Налаштування -> Читання -> Ваша домашня сторінка відображає -> Сторінка записів (Settings -> Reading -> Your homepage displays -> Posts page).
if ( is_home() && ! is_front_page() ) {
echo 'IS BLOG PAGE';
} else {
echo 'IS NOT BLOG PAGE';
}
Як визначити сторінку блогу (архіву записів) або сторінку посту
if ( ( is_home() && ! is_front_page() ) || ( is_singular( 'post' ) ) ) {
var_dump( 'IS BLOG PAGE OR POST PAGE' );
} else {
var_dump( 'NO BLOG PAGE AND NO POST PAGE' );
}
Як додати користувацькі типи записів (CPT) у пошук
Відображення постів користувацького типу записів у пошуку встановлюється під час реєстрації типу записів, у параметрі exclude_from_search
функції register_post_type()
. Якщо тип записів не включений у пошук, то альтернативний спосіб додати його туди — код нижче. У цьому прикладі до результатів пошуку буде включений тип записів books
.
/**
* Add custom post types (CPT) "books" to search
*/
add_action( 'pre_get_posts', 'mp_add_cpt_books_to_search' );
function mp_add_cpt_books_to_search( $query ) {
if ( ! is_admin() && $query->is_main_query() && $query->is_search ) {
$query->set( 'post_type', array( 'post', 'books' ) );
}
}
до змісту ↑Як для всіх сторінок сайту у тег <html> додати власний атрибут
Наприклад, тег виглядає так:
<html lang="uk">
Його потрібно змінити на наступний:
<html lang="uk" newattribute="newvalue">
Для цього використайте простий код
/**
* Add new attribute to <html tag
*/
add_filter( 'language_attributes', 'mp_add_new_attribute_to_html_tag' );
function mp_add_new_attribute_to_html_tag( $output ) {
return $output . ' newattribute="newvalue"';
}
до змісту ↑Як організувати пошук на всьому сайті виключно за вказаними постами/сторінками
/**
* Search on the entire site exclusively for the specified posts/pages
*/
add_action( 'pre_get_posts', function( $query ) {
if ( $query->is_search() && $query->is_main_query() && ! is_admin() ) {
/* Var 1 - Включаємо пошук виключно для постів/сторінок із вказаними ID */
$include_pages_ids = array( 2, 55 );
$query->set( 'post__in', $include_pages_ids );
/* Var 2 - Включаємо пошук виключно для постів/сторінок із вказаними слагами */
$include_pages_slugs = array( 'sample-page', 'sample-page-2' );
$query->set( 'post_name__in', $include_pages_slugs );
}
});
до змісту ↑Змінити стандартні написи у формі коментування
function mp_change_comments_form_labels( $defaults ) {
// Текст перед формою коментування
$defaults['title_reply'] = 'Текст перед формою';
// Текст кнопки у формі коментування
$defaults['label_submit'] = 'Текст кнопки';
return $defaults;
}
add_filter( 'comment_form_defaults', 'mp_change_comments_form_labels' );
Додати кнопку розриву сторінки у візуальний редактор TinyMCE
add_filter( 'mce_buttons', 'mp_add_tinymce_page_break' );
function mp_add_tinymce_page_break( $mce_buttons ) {
$pos = array_search( 'wp_more', $mce_buttons, true );
if( $pos !== false ) {
$buttons = array_slice( $mce_buttons, 0, $pos );
$buttons[] = 'wp_page';
$mce_buttons = array_merge( $buttons, array_slice( $mce_buttons, $pos ) );
}
return $mce_buttons;
}
Як програмно вимкнути архіви
/**
* Remove WordPress archives
*/
add_action( 'template_redirect', 'mp_remove_wp_archives' );
function mp_remove_wp_archives() {
if( is_category() || is_tag() || is_date() || is_author() ) {
global $wp_query;
$wp_query->set_404();
}
}
Як автоматично додати атрибут lightbox посиланням на зображення
add_filter( 'the_content', 'mp_add_lightbox_attr_to_image_links' );
function mp_add_lightbox_attr_to_image_links( $content ) {
$pattern ="/<a(.*?)href=('|\")(.*?).(bmp|gif|jpeg|jpg|png)('|\")(.*?)>/i";
$replacement = '<a$1href=$2$3.$4$5 rel="lightbox"$6>';
$content = preg_replace( $pattern, $replacement, $content );
return $content;
}
Як завантажувати бібліотеку jQuery із Google CDN
WordPress вже містить в собі бібліотеку jQuery, яка використовується як самим движком, так і різними темами та плагінами. За необхідності ви можете змусити ВордПрес завантажувати jQuery із зовнішнього сховища (CDN).
У WordPress бібліотека jQuery іноді оновлюється разом із самим движком. І саме тому використання конкретної версії jQuery із зовнішнього сховища може бути зручнішим за використання вбудованої версії — так як не всі теми та плагіни можуть бути сумісні з новішою версією jQuery. Зробити це можна за допомогою наступного коду:
add_action( 'init', 'mp_jquery_from_cdn' );
function mp_jquery_from_cdn() {
if ( ! is_admin() ) {
wp_deregister_script( 'jquery' );
$jqueryUrl = 'https://ajax.googleapis.com/ajax/libs/jquery/3.7.1/jquery.min.js';
wp_register_script( 'jquery', $jqueryUrl, false, null, false );
wp_enqueue_script( 'jquery' );
}
}
до змісту ↑Контент у редакторі Gutenberg за замовчуванням при створенні нової публікації
add_filter( 'the_editor_content', 'mp_set_default_editor_content', 1000, 2 );
function mp_set_default_editor_content( $content, $default_editor ) {
global $pagenow;
if ( 'post-new.php' === $pagenow ) {
ob_start();
?>
<p>Default content here...</p>
<?php
return ob_get_clean();
}
return $content;
}
Як вивести на екран текст копірайту із поточним роком
function mp_get_copyright( $startYear, $siteName ) {
$copyrightText = '';
$currentYear = date( 'Y' );
if ( $startYear != $currentYear ) {
$copyrightText = 'Copyright © ' . $startYear . '-' . $currentYear . ' ' . $siteName;
} else {
$copyrightText = 'Copyright © ' . $startYear . ' ' . $siteName;
}
return $copyrightText;
}
Виклик функції для виведення копірайту:
echo mp_get_copyright( початковий_рік, "назва_компанії" );
Наприклад, для цього блогу:
echo mp_get_copyright( 2021, "petrov.net.ua" );
Результат роботи функції:
Copyright © 2021-2023 petrov.net.ua
до змісту ↑Як автоматично вставити власний (кастомний) вміст перед основним контентом запису/сторінки
/**
* Insert custom content before main content (on the example of a Single Post)
*/
add_filter( 'the_content', 'mp_insert_custom_content_before_main_content' );
function mp_insert_custom_content_before_main_content( $content ) {
if ( is_single() ) {
$customContent = 'CUSTOM CONTENT BEFORE MAIN CONTENT';
$content = $customContent . $content;
}
return $content;
};
Як автоматично вставити власний (кастомний) вміст після основного контенту запису/сторінки
/**
* Insert custom content after main content (on the example of a Single Post)
*/
add_filter( 'the_content', 'mp_insert_custom_content_after_main_content' );
function mp_insert_custom_content_after_main_content( $content ) {
if ( is_single() ) {
$customContent = 'CUSTOM CONTENT AFTER MAIN CONTENT';
$content .= $customContent;
}
return $content;
};
Як автоматично вставити власний (кастомний) вміст після заголовку запису/сторінки
/**
* Insert custom content at the end of Title (on the example of a Single Post)
*/
add_filter( 'the_title', 'mp_insert_custom_content_at_the_end_of_title' );
function mp_insert_custom_content_at_the_end_of_title( $title ) {
if ( is_single() ) {
$customTitle = 'CONTENT AT THE END OF TITLE';
$title .= $customTitle;
}
return $title;
};
Як автоматично вставити власний (кастомний) вміст після конкретного параграфу запису/сторінки
/**
* Insert custom content after a certain paragraph (on the example of a Single Post)
*/
add_filter( 'the_content', 'mp_insert_custom_content_after_a_certain_paragraph' );
function mp_insert_custom_content_after_a_certain_paragraph( $content ) {
if ( ! is_single() )
return $content;
$newСontent = '';
// Номер абзацу, після якого буде виводитися ваш вміст
$paragraphAfter = 1;
// Ваш вміст
$contentAfterParagraph = 'CONTENT AFTER A CERTAIN PARAGRAPH';
$content = explode ( "</p>", $content );
for ( $i = 0; $i < count ( $content ); $i++ ) {
if ( $i == $paragraphAfter ) {
$newСontent .= $contentAfterParagraph;
}
$newСontent .= $content[$i] . "</p>";
}
return $newСontent;
}
до змісту ↑Перевірка чи переглядає сайт користувач із правами Адміністратора
// Варіант 1
if ( current_user_can( 'administrator' ) && current_user_can( 'manage_options' ) ) {
// Адміністратор
}
// Варіант 2
if ( current_user_can( 'manage_options' ) ) {
// Адміністратор
}
Як увімкнути режим розробки (Maintenance Mode)
add_action( 'get_header', 'mp_maintenance_mode' );
function mp_maintenance_mode() {
if ( ! current_user_can( 'administrator' ) && ! current_user_can( 'manage_options' ) || ! is_user_logged_in () ) {
wp_die( 'Сайт знаходиться у розробці...' );
}
}
Як дозволити завантажувати файли SVG через Медіабібліотеку
За замовчуванням у WordPress не підтримується завантаження файлів SVG. А тому при завантаженні такого файлу через адмін-меню Медіафайли -> Додати новий ви отримаєте повідомлення про помилку:
Файл «logo.svg» не вдалося завантажити.
Sorry, you are not allowed to upload this file type.
Щоб обійти це обмеження, додайте наступний код у файл functions.php:
/**
* Enable SVG Support
*/
add_filter( 'upload_mimes', 'mp_svg_upload_allow' );
function mp_svg_upload_allow( $mimes ) {
$mimes['svg'] = 'image/svg+xml';
return $mimes;
}
add_filter( 'wp_check_filetype_and_ext', 'mp_fix_svg_mime_type', 10, 5 );
function mp_fix_svg_mime_type( $data, $file, $filename, $mimes, $real_mime = '' ) {
if ( version_compare( $GLOBALS['wp_version'], '5.1.0', '>=' ) )
$dosvg = in_array( $real_mime, ['image/svg', 'image/svg+xml'] );
else
$dosvg = ( '.svg' === strtolower( substr( $filename, -4 ) ) );
if ( $dosvg ) {
if ( current_user_can( 'manage_options' ) ) {
$data['ext'] = 'svg';
$data['type'] = 'image/svg+xml';
} else {
$data['ext'] = $type_and_ext['type'] = false;
}
}
return $data;
}
add_filter( 'wp_prepare_attachment_for_js', 'mp_show_svg_in_media_library' );
function mp_show_svg_in_media_library( $response ) {
if ( $response['mime'] === 'image/svg+xml' ) {
$response['image'] = [
'src' => $response['url'],
];
}
return $response;
}
до змісту ↑Інші корисні сніпети для functions.php
- Як вимкнути сповіщення про оновлення в адмінці WordPress
- Як виключити з пошуку на WordPress-сайті всі Сторінки
- Як видалити посилання активного (поточного) пункту меню WordPress
- Як перевірити чи поточна сторінка WordPress є домашньою
- Як на головній сховати записи з конкретної рубрики (категорії) WordPress
- Як на головній показати записи лише з конкретної рубрики WordPress
- Як на головній сторінці WordPress відсортувати пости випадково (рандомно)
- Як змінити сортування категорій та сторінок WordPress
- Як автоматично заповнювати поля Alt, Caption та Description при завантаженні файлів у WordPress
- Як вивести на екран усі завантажені в шапці/підвалі JS та CSS-скрипти WordPress
- Як у WordPress автоматично створити сторінку
- Як створити віртуальну сторінку в WordPress
- Як у WordPress програмно додати у кінець меню свій елемент
- Як у WordPress закрити сторінку (запис) від індексації пошуковими системами
- Як у WordPress видалити порожнє посилання у меню з адресою #
- Як заборонити деактивацію WordPress плагіну в адмін-панелі
- Як налаштувати 301 редирект у WordPress
- Як у WordPress вимкнути автоматичний редирект після зміни слагу посту чи сторінки
- Як створити додаткові розміри зображень у WordPress
- Як перевірити чи активований плагін WordPress
- Як вимкнути верхню панель адміністратора (тулбар) WordPress
- Як отримати ID посту WordPress
- Як у WordPress заборонити видалення окремих сторінок (записів)
- Пошук за користувацькими полями WordPress
- Як у WordPress додати розмітку Open Graph для окремої сторінки без плагінів
- Як у WordPress визначити пристрій користувача (мобільний чи ПК)
- Як перевірити мінімальну версію PHP
- Як у WordPress отримати поточну локаль (код мови) сайту
- Як у WordPress видалити старі слаги постів/записів
- Як прибрати тег "figure" у WordPress редакторі блоків Gutenberg при вставці зображень та замінити його на простий параграф "p"
- Обрізання мініатюр у WordPress: повний гайд
- Як у верхню панель WordPress додати посилання на видалення поста/сторінки
- Шорткод курсу валют за допомогою WordPress API