Разгрузка functions.php
Для разгрузки основного файла functions.php нужно в папке темы создать папку (например inc) и в нее помещать файлы функций (желательно по назначению: хлебные крошки, шорткоды, редактирование, связанные с плагинами, customizer, виджеты).
В основном файле functions.php подключаем фрагменты из директории inc
require get_template_directory() . '/inc/plagins-updater.php'; require get_template_directory() . '/inc/simple-widget.php'; require get_template_directory() . '/inc/wordpress-breadcrumbs.php'; require get_template_directory() . '/inc/wordpress-customizer.php'; require get_template_directory() . '/inc/wordpress-updater.php'; require get_template_directory() . '/inc/wordpress-writer.php'; require get_template_directory() . '/inc/wp-shortcoder.php';
Расширение основного функционала WP
Узнать подробнее что такое функция можно здесь.
// html теги в описании рублики
remove_filter('pre_term_description', 'wp_filter_kses');
remove_filter('pre_term_description', 'wp_kses_data');
// Шорткоды в описании рублики
add_filter( 'term_description', 'shortcode_unautop');
add_filter( 'term_description', 'do_shortcode' );
// добавление цитаты в редактировании страницы
add_post_type_support( 'page', 'excerpt' );
// настройка количества символов цитаты по умолчанию
function custom_excerpt_length() {
$length = 50;
return $length;
}
add_filter('excerpt_length', 'custom_excerpt_length');
// регистрируем меню
function register_my_menus() {
register_nav_menus (
array( 'header-menu' => 'header-menu1', 'left-menu' => 'left-menu1')
);
}
// запуск меню
if (function_exists('register_nav_menus')) {
add_action( 'init', 'register_my_menus' );
}
//добавление поддержки миниатюр
if ( function_exists('add_theme_support') ) {
add_theme_support('post-thumbnails');
}
//регистрируем сайтбар
register_sidebar(
array(
'id' => 'primary',
'name' => __( 'Primary' ),
'description' => __( 'Описание сайтбара (видно в админ панели).' ),
'before_widget' => '<div class="widgit">',
'after_widget' => '</div>',
'before_title' => '<h2 class="headwidgit">',
'after_title' => '</h2>'
)
);
Поддержка PHP-кода в виджетах
// Поддержка PHP в виджетах
function php_in_widgets($widget_content) {
if (strpos($widget_content, '<' . '?') !== false) {
ob_start();
eval('?' . '>' . $widget_content);
$widget_content = ob_get_contents();
ob_end_clean();
}
return $widget_content;
}
add_filter('widget_text', 'php_in_widgets', 99);
Данная функция будет действовать и на Текстовый виджет и на виджет Пользовательский HTML, которые были добавлены в WordPress 4.8
Решение мягко говоря нестабильное, лучше использовать плагин PHP Code Widget (200 000).
Только при установке выплыла ошибка create_function() is deprecated. Решил проблему заменив функцию в единственном файле плагина execphp.php с
add_action('widgets_init', create_function('', 'return register_widget("PHP_Code_Widget");'));
на
function php_code_widget_init_widget () {
return register_widget('PHP_Code_Widget');
}
add_action ('widgets_init', 'php_code_widget_init_widget');
Меняем текст на логотип
Мы можем любое слово на странице заменить на логотип:
function replace_text_wps($text){
$replace = array(
'UNDERSUN' => '<img class="company-logo" src="/wp-content/uploads/2017/09/undersun_logo-classic.png">'
);
$text = str_replace(array_keys($replace), $replace, $text);
return $text;
}
Либо сделать слово (или несколько слов) ссылкой:
function replace_text_wps($text){
$replace = array(
'thesis' => '<a href="http://mysite.com/myafflink" rel="nofollow">thesis</a>',
'studiopress' => '<a href="http://mysite.com/myafflink" rel="nofollow">studiopress</a>'
);
$text = str_replace(array_keys($replace), $replace, $text);
return $text;
}
Далее привязываем функцию к содержимому записи, либо к отрывку:
add_filter('the_content', 'replace_text_wps');
add_filter('the_excerpt', 'replace_text_wps');
Удалить слово Архив: из заголовков архивов
// Удалить слово Архив из заголовков архивов
add_filter( 'get_the_archive_title', function( $title ){
return preg_replace('~^[^:]+: ~', '', $title );
});
[site-socialshare]