Вопрос или проблема
cleanup после after_setup_theme и wp_head
Я пытаюсь немного очистить код в своей теме, удалить часть неиспользуемого кода и в основном делать всё правильно, чтобы уменьшить время загрузки и т.д.
В данный момент у меня есть этот код:
add_action('after_setup_theme', 'rm_theme_setup');
// начало настройки темы
function rm_theme_setup() {
add_action('init', 'rm_head_cleanup'); // * 1) вызов функции ниже
add_action('wp_head', 'rm_remove_recent_comments_style', 1);
add_filter('gallery_style', 'rm_remove_gallery_style');
rm_add_theme_support(); // * 2) вызов функции для добавления поддержки темы
}
1) Это часть очистки wp_head: В основном я вызываю эту функцию в функции theme_setup выше. Это правильный способ делать вещи?
function rm_head_cleanup() {
remove_action('wp_head', 'feed_links_extra', 3);
remove_action('wp_head', 'feed_links', 2);
remove_action('wp_head', 'rsd_link');
remove_action('wp_head', 'wlwmanifest_link');
remove_action('wp_head', 'index_rel_link');
remove_action('wp_head', 'parent_post_rel_link', 10, 0);
remove_action('wp_head', 'start_post_rel_link', 10, 0);
remove_action('wp_head', 'adjacent_posts_rel_link_wp_head', 10, 0);
remove_action('wp_head', 'wp_generator');
remove_action('wp_head', 'wp_shortlink_wp_head');
add_filter('style_loader_src', 'rm_remove_wp_ver_css_js');
add_filter('style_loader_tag', 'rm_clean_style_tags');
add_filter('script_loader_src', 'rm_remove_wp_ver_css_js');
}
2) Затем позже в коде у меня есть эта функция, для добавления поддержки темы. Когда вы проверяете функцию настройки темы, я просто делаю это: rm_add_theme_support();. Это правильный способ делать это, или мне стоит просто скопировать всё из этой функции и вставить в theme_setup?
function rm_add_theme_support() {
add_theme_support('post-thumbnails');
// удаление стандартных миниатюр
update_option('thumbnail_size_h', 0);
update_option('thumbnail_size_w', 0);
update_option('medium_size_h', 0);
update_option('medium_size_w', 0);
update_option('large_size_h', 0);
update_option('large_size_w', 0);
// set_post_thumbnail_size(200, 200, true);
add_image_size('rm-slide', 960, 500);
add_image_size('rm-service-image', 380, 9999);
add_image_size('rm-service-thumbnail', 80, 60, true);
add_theme_support('menus');
register_nav_menus(
array(
'main-nav' => 'Главное меню'
)
);
}
Спасибо за помощь, надеюсь, что это не слишком много кода.
Что вам следует сделать:
-
Прочитайте Где положить мой код: плагин или functions.php? и примените уроки к вашей теме.
Темы предназначены только для представления. Удалите всё, что не связано с представлением: не трогайте
link
иmeta
элементы в заголовке. Это территория плагинов. -
Удалите избыточный код.
add_theme_support('menus');
не нужен, если вы вызываетеregister_nav_menus()
.update_option()
не должно вызываться при каждой загрузке страницы. Сначала проверьте существующие опции и изменяйте их только в случае необходимости. -
add_theme_support('post-thumbnails');
сомнительно, если вы убираете размеры миниатюр. Почему бы вам просто не изменить его на80x60
? Тогда миниатюры всё равно будут доступны после переключения темы. Это можно сделать с другими размерами тоже.
должен ли я просто скопировать всё из этой функции и вставить в theme_setup?
Нет, держите отдельные задачи в отдельных функциях или классах. Не смешивайте разные задачи только для экономии строк кода. Проще отключить определённые функции с помощью плагина, следуя правилу Разделение обязанностей. rm_add_theme_support()
уже делает слишком много, потому что меню не связано с размерами изображений.
Ответ или решение
Конечно, давайте разберем этот вопрос более детально.
Чистка после after_setup_theme
и wp_head
1. Правильная реализация очищения wp_head
Вызывая rm_head_cleanup()
в функции rm_theme_setup()
, вы делаете это в правильном контексте, однако лучше было бы напрямую привязать очистку в момент инициализации, а не внутри функции настройки темы. Например, вы можете вызвать rm_head_cleanup
сразу же при помощи add_action('init', 'rm_head_cleanup');
вне rm_theme_setup
. Это повысит читаемость и разграничит задачи.
Вот пример в улучшенном виде:
add_action('init', 'rm_head_cleanup');
function rm_head_cleanup() {
remove_action('wp_head', 'feed_links_extra', 3);
remove_action('wp_head', 'feed_links', 2);
remove_action('wp_head', 'rsd_link');
remove_action('wp_head', 'wlwmanifest_link');
remove_action('wp_head', 'index_rel_link');
remove_action('wp_head', 'parent_post_rel_link', 10, 0);
remove_action('wp_head', 'start_post_rel_link', 10, 0);
remove_action('wp_head', 'adjacent_posts_rel_link_wp_head', 10, 0);
remove_action('wp_head', 'wp_generator');
remove_action('wp_head', 'wp_shortlink_wp_head');
add_filter('style_loader_src', 'rm_remove_wp_ver_css_js');
add_filter('style_loader_tag', 'rm_clean_style_tags');
add_filter('script_loader_src', 'rm_remove_wp_ver_css_js');
}
2. Поддержка тем и использование функций
Что касается вашей функции rm_add_theme_support()
, она не должна быть скопирована в rm_theme_setup
. Вместо этого лучше оставить их отдельными. Это позволит лучше управлять кодом и вносить изменения в конкретные особенности темы без необходимости отслеживать все функции.
В качестве улучшения кода можно сделать следующее:
- Уберите вызов
update_option()
из функции и переместите это в инициализацию темы, если вы уверены, что вам нужно изменить размеры изображений только один раз. - Существует хорошая практика: избегать включения и отключения функций в зависимости от условий, если это не необходимо.
Важно отметить, что если вы удаляете стандартные размеры миниатюр, рассмотрите возможность изменения значения параметров для add_image_size()
вместо того, чтобы полностью их удалять. Это позволит сохранить совместимость при смене темы.
Итоговый код:
Вот реорганизованный код для лучшего управления:
function rm_theme_setup() {
rm_add_theme_support();
}
// Добавление поддержки темы
function rm_add_theme_support() {
add_theme_support('post-thumbnails');
add_image_size('rm-slide', 960, 500);
add_image_size('rm-service-image', 380, 9999);
add_image_size('rm-service-thumbnail', 80, 60, true);
register_nav_menus(array(
'main-nav' => 'Главное меню'
));
}
add_action('after_setup_theme', 'rm_theme_setup');
add_action('init', 'rm_head_cleanup');
function rm_head_cleanup() {
remove_action('wp_head', 'feed_links_extra', 3);
remove_action('wp_head', 'feed_links', 2);
remove_action('wp_head', 'rsd_link');
remove_action('wp_head', 'wlwmanifest_link');
remove_action('wp_head', 'index_rel_link');
remove_action('wp_head', 'parent_post_rel_link', 10, 0);
remove_action('wp_head', 'start_post_rel_link', 10, 0);
remove_action('wp_head', 'adjacent_posts_rel_link_wp_head', 10, 0);
remove_action('wp_head', 'wp_generator');
remove_action('wp_head', 'wp_shortlink_wp_head');
add_filter('style_loader_src', 'rm_remove_wp_ver_css_js');
add_filter('style_loader_tag', 'rm_clean_style_tags');
add_filter('script_loader_src', 'rm_remove_wp_ver_css_js');
}
Заключение
Следуя этим рекомендациям и придерживаясь лучшей практики по разделению функций, ваш код станет более чистым и понятным. Это также поможет вам легче управлять функциональностью темы, делая её более производительной и эффективной.