Где находиться functions.php WordPress и его применение

Расширяем возможности сайта через functions.php

10.03.2017
362 Просмотры

Хотите расширить функционал вашего сайта, внести корректировки или просто повысить производительность CMS WordPress? Многие владельцы сайтов на WordPress решают эту задачу добавлением небольшого кода в файл “functions.php” установленной темы. Попробуем рассмотреть моменты, плюсы и минусы данной процедуры.

Содержание

Functions.php в WordPress

Файл functions.php необходим для правильной работы темы, с помощью него можно расширить стандартные ее функции и установить некоторые параметры ядра WordPress.

functions.php подгружается всегда при обращении к страницам сайта, во время AJAX запросов и при посещении административной панели WordPress. Зная это, можно добавлять свои php-функции или функции WordPress в файл functions.php для выполнения необходимого функционала.

Где находиться файл functions.php: /wp-content/themes/название_вашей_темы/functions.php

Где находиться functions.php

Где находиться functions.php

Рад пользователей WordPress считают, что добавление функций непосредственно в файл functions.php вместо установки альтернативных по функционалу плагинов – повышают производительность их сайта. К сожалению это не так.

Что лучше использовать – functions.php или плагин?

Чем functions.php отличается от плагина? Если объяснять просто – то ничем.

Разница «плагинов» и «functions.php» в назначении и порядке выполнения. Первым загружается functions.php, плагины подгружаются после, но могут быть отключены через админ-панель. functions.php же загружается всегда. Но если выполнять одинаковый программный код по средством плагина и functions, выполняться они будут одинакового и их место выполнения никак не повлияет на скорость работы сайта.

Частично на скорость загрузки сайта влияет качество кода плагинов и функций для functions.php

Процесс подключения functions.php происходит во время инициализации текущей темы, после подключения функций WordPress.

Процесс подключения functions.php

Процесс подключения functions.php

index.php
       wp-blog-header.php
              wp-load.php
                     wp-config.php
                            wp-settings.php
                                   // Подключаются самые базовые функции (подключение к БД $wpdb и система фильтров)
                                   // Подключаются базовые фильтры

                                   // SHORTINIT: Остановка загрузки, где есть только самое базовое: if ( SHORTINIT ) return false;

                                   // подключается вся среда WordPress: базовые функции, фильтры
                                   
                                   // подключаются must-use плагины, затем срабатывает событие:
                                   do_action( 'muplugins_loaded' );
                                   
                                   // подключаются активированные плагины, затем срабатывает событие:
                                   do_action( 'plugins_loaded' );

                                   // устанавливаются глобальные переменные: wp_the_query, wp_query, wp_rewrite, wp, wp_widget_factory, wp_roles ...
                                   
                                   do_action( 'setup_theme' );
                                   // устанавливается текущая тема
                                   // подключается файл темы >>>>>>>>>>>> functions.php <<<<<<<<<<<<
                                   do_action( 'after_setup_theme' );

                                   // событие, когда среда WP, все плагины и тема полностью подключены, но на экран еще ничего не выведено:
                                   do_action( 'init' );
                                   
                                   // проверка статуса сайта для мультисайтовой сборки

                                   // тоже самое что init только после проверки статуса (до этой строки работа PHP может не дойти)
                                   do_action( 'wp_loaded' );
                            
              wp() // заполняет основной запрос WP и все глобальные переменные связанные с ним

              wp-includes/template-loader.php // подключает нужный файл шаблона

Как добавить функцию и примеры использования functions.php

Открываем файл functions.php в любимом текстовом редакторе, например Notepad++.
Местоположение файла functions.php: /wp-content/themes/название_вашей_темы/functions.php
Если в вашей теме такого файла нет, создайте его с названием functions.php в папке вашего шаблона: /wp-content/themes/название_вашей_темы И скопируйте в файл нужный код функции.

Плагин как альтернатива файлу functions.php

Существует более правильный способ добавлять новые функции для вашего сайта. Необходимо добавить пустой плагин для WordPress и активировать его. Затем в него можно добавлять новые функции, как раньше делали это c файлом functions.php.

Создайте новый файл с расширением .php, например: «functionsphp.php» с кодом:

<?php
/* ====================================
 * Plugin Name: Functions.PHP
 * Description: Мой новый functions.php
 * Version: 1.0
 * ==================================== */

function functionsphp_head_info(){
 echo "\n<!-- Плагин Functions.PHP активен -->\n";
}
add_action('wp_head', 'functionsphp_head_info');

Данный плагин загружаем по FTP в директорию плагинов WP: /wp-content/plugins/

Скопируйте любые функции, которые обычно помечаются как «вставить в functions.php» в ваш новый плагин. После внесение изменений активируйте плагин. Не забудьте выключать плагин при добавлении новых строчек кода. Если после очередной функции сайт выдает ошибки, возможно вы нарушали синтаксис кода или данный код не актуален для вашей версии движка\темы.

Для начинающих разработчиков или для тех кто сам захочет написать функцию для WordPress есть хороший инструмент: Generatewp

Примеры: функции для functions.php

Вывод информации по разработке сайта в админ-панели

/* Разработка сайта */ 
function true_change_admin_footer () {
       $footer_text = array(
              'Спасибо вам за творчество с <a target="_blank" href="http://wordpress.org">WordPress</a>',
              'Разработка проекта <a target="_blank" href="https://youkit.ru" target="_blank">Александр Никитин</a>'
       );
       return implode( ' &bull; ', $footer_text);
}
add_filter('admin_footer_text', 'true_change_admin_footer');

Отключение создания миниатюр – любых размеров изображений

/* Не создавать миниатюры картинок */ 
add_filter( 'intermediate_image_sizes', 'delete_intermediate_image_sizes' );
function delete_intermediate_image_sizes( $sizes ) {
  return array_diff( $sizes, array(
    'thumbnail', // миниатюра
    'medium', // средний
    'medium_large', // средний в админке
    'large' // большой
  ) );
}

Вы так же можете добавить удаление миниатюр для нестандартных тем WP, указав их названия в кавычках, через запятую: ‘img_100x100’,  ‘img_300x300’,  ‘img_baner’,

Для отключение других размеров изображений ищем и удаляем в плагинах и теме сроки начинающиеся с кода:

add_image_size()

Второй вариант оптимизации изображений

function replace_uploaded_image($image_data) {
      // if there is no large image : return
  if (!isset($image_data['sizes']['large'])) return $image_data;

  // paths to the uploaded image and the large image
  $upload_dir = wp_upload_dir();
  $uploaded_image_location = $upload_dir['basedir'] . '/' .$image_data['file'];
  // $large_image_location = $upload_dir['path'] . '/'.$image_data['sizes']['large']['file']; // ** This only works for new image uploads - fixed for older images below.
  $current_subdir = substr($image_data['file'],0,strrpos($image_data['file'],"/"));
  $large_image_location = $upload_dir['basedir'] . '/'.$current_subdir.'/'.$image_data['sizes']['large']['file'];

  // delete the uploaded image
  unlink($uploaded_image_location);

  // rename the large image
  rename($large_image_location,$uploaded_image_location);

  // update image metadata and return them
  $image_data['width'] = $image_data['sizes']['large']['width'];
  $image_data['height'] = $image_data['sizes']['large']['height'];
  unset($image_data['sizes']['large']);

  return $image_data;
}

add_filter('wp_generate_attachment_metadata','replace_uploaded_image');

Подключаем популярные шрифты-иконки Font Awesome

/* Шрифты Font Awesome */ 
function font_awesome() {
  if (!is_admin()) {
    wp_register_style('font-awesome', 'https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.6.3/css/font-awesome.min.css');
    wp_enqueue_style('font-awesome');
  }
}
add_action('wp_enqueue_scripts', 'font_awesome');

Отключаем ревизии для экономии ресурсов

/* Не хранить ревизии */ 
function my_revisions_to_keep( $revisions ) {
    return 0;
}
add_filter( 'wp_revisions_to_keep', 'my_revisions_to_keep' );

Открыть все внешние ссылки в новом окне

/* Открыть все внешние ссылки в новом окне */ 
function autoblank($text) {
$return = str_replace('target="_blank" href=', 'target="_blank" target="_blank" href=', $text);
$return = str_replace('target="_blank" target="_blank" href="https://youkit.ru', 'target="_blank" href="https://youkit.ru', $return);
$return = str_replace('target="_blank" href="/', 'href="/', $return);
$return = str_replace('target="_blank" href="#', 'href="#', $return);
$return = str_replace(' target = "_blank">', '>', $return);
return $return;
}
add_filter('the_content', 'autoblank');
add_filter('comment_text', 'autoblank');

Добавляем поддержку Favicon для всех популярных устройств

add_action('wp_head', 'fphp_add_favicons');
function fphp_add_favicons() {
    ?>
<!-- ваши favicon -->
<link rel="apple-touch-icon-precomposed" sizes="57x57" href="/image/apple-touch-icon-57x57.png" />
<link rel="apple-touch-icon-precomposed" sizes="114x114" href="/image/apple-touch-icon-114x114.png" />
<link rel="apple-touch-icon-precomposed" sizes="72x72" href="/image/apple-touch-icon-72x72.png" />
<link rel="apple-touch-icon-precomposed" sizes="144x144" href="/image/apple-touch-icon-144x144.png" />
<link rel="apple-touch-icon-precomposed" sizes="60x60" href="/image/apple-touch-icon-60x60.png" />
<link rel="apple-touch-icon-precomposed" sizes="120x120" href="/image/apple-touch-icon-120x120.png" />
<link rel="apple-touch-icon-precomposed" sizes="76x76" href="/image/apple-touch-icon-76x76.png" />
<link rel="apple-touch-icon-precomposed" sizes="152x152" href="/image/apple-touch-icon-152x152.png" />
<link rel="icon" type="/image/png" href="/image/favicon-196x196.png" sizes="196x196" />
<link rel="icon" type="/image/png" href="/image/favicon-96x96.png" sizes="96x96" />
<link rel="icon" type="/image/png" href="/image/favicon-32x32.png" sizes="32x32" />
<link rel="icon" type="/image/png" href="/image/favicon-16x16.png" sizes="16x16" />
<link rel="icon" type="/image/png" href="/image/favicon-128.png" sizes="128x128" />
<meta name="application-name" content="&nbsp;"/>
<meta name="msapplication-TileColor" content="#FFFFFF" />
<meta name="msapplication-TileImage" content="/image/mstile-144x144.png" />
<meta name="msapplication-square70x70logo" content="/image/mstile-70x70.png" />
<meta name="msapplication-square150x150logo" content="/image/mstile-150x150.png" />
<meta name="msapplication-wide310x150logo" content="/image/mstile-310x150.png" />
<meta name="msapplication-square310x310logo" content="/image/mstile-310x310.png" />
<!-- ваши favicon end -->
<?php
}

Вставляем рекламу после определенного количества символов

function kama_content_advertise($text){
//спустя сколько символов искать перенос строки и вставлять рекламу?
    $nu = 400;
//Код рекламы
    $adsense = <<<HTML
<div style="float:right;margin:0 0 10px 15px;">
Здесь ваш рекламный код
</div>
HTML;
    //    return str_replace('<span id="more-5424"></span>', $adsense.'<!--more-->', $text);
    return preg_replace('@([^^]{'.$nu.'}.*?)(\r?\n\r?\n|
)@', "\\1$adsense\\2", trim($text), 1);
}
add_filter('the_content', 'kama_content_advertise', -10);

Показывать рекламу только тем, кто пришел из поиска

function scratch99_fromasearchengine(){
  $ref = $_SERVER['HTTP_REFERER'];
  $SE = array('/search?', 'images.google.', 'web.info.com', 'search.', 'del.icio.us/search', 'soso.com', '/search/', '.yahoo.');
  foreach ($SE as $source) {
    if (strpos($ref,$source)!==false) return true;
  }
  return false;
}

Применение: Вставляем в то место, где должна выводиться реклама, например Google AdSense.

if (function_exists('scratch99_fromasearchengine')) {
  if (scratch99_fromasearchengine()) {
    Код вашей рекламы введите здесь.
  }
}

Не выводить определенные рубрики на главной странице сайта

//Не выводить определенные Рубрики на главной странице сайта
function exclude_category($query) {
if ( $query->is_home ) {
$query->set('category__not_in', array(100,101));}
return $query;
}
add_filter('pre_get_posts', 'exclude_category');

где 100 и 101 это id желаемой рубрики WP

Удаление пробела между анонсом и полным текстом – more

Для удаления конструкции:

<p><span id="more..."></span></p>

из полной статьи в wordpress, добавляем функцию:

<?php
function no_more($content) {
if ( !is_feed() && !is_page() && !is_home() && !is_search() && !is_archive() && !is_author() && !is_category() && !is_paged())
$content = preg_replace('(<p><span id=\"more[^>]*></span></p>)', '', $content);
return $content;
}
add_filter('the_content', 'no_more', 500);
?>

Изменение пути к странице автора – замена author на user

add_action('init', 'set_new_author_base');
function set_new_author_base() {
    global $wp_rewrite;
    $author_slug = 'user';
    $wp_rewrite->author_base = $author_slug;
    $wp_rewrite->flush_rules();
}

Изменения окончания различных слов, например: день, дня, дней

function plural_end($n) {
    return ($n%10==1 && $n%100!=11 ? 0 : ($n%10>=2 && $n%10<=4 && ($n%100<10 || $n%100>=20) ? 1 : 2));
}

Вывод склонения окончания слов:

// задаем массив значений определенного слова
$_plural_days = array('день', 'дня', 'дней');

// выводим значение
echo $_plural_days[plural_end($counter)];
// Где: $counter - это количество дней

Отключение стандартного поиска WordPress

function fb_filter_query( $query, $error = true ) {

       if ( is_search() ) {
              $query->is_search = false;
              $query->query_vars[s] = false;
              $query->query[s] = false;

              // Ошибка
              if ( $error == true )
                     $query->is_404 = true;
       }
}

add_action( 'parse_query', 'fb_filter_query' );
add_filter( 'get_search_form', create_function( '$a', "return null;" ) );

Убираем выпадающий список в поиске

/*** Убрать выпадающий список в поиске  **/
add_filter( 'electro_enable_live_search','__return_false', 20 );

Скрыть текст после конкретной даты

function content_countdown($atts, $content = null){
  extract(shortcode_atts(array(
     'month' => '',
     'day'   => '',
     'year'  => ''
    ), $atts));
    $remain = ceil((mktime( 0,0,0,(int)$month,(int)$day,(int)$year) - time())/86400);
    if( $remain > 1 ){
        return $daysremain = "<div class=\"event\">Осталось дней до появления - <strong>($remain)</strong></div>";
    }else if($remain == 1 ){
    return $daysremain = "<div class=\"event\">Остался всего <strong>($remain)</strong> день до появления</div>";
    }else{
        return $content;
    }
}
add_shortcode('cdt', 'content_countdown');

Применение: [cdt month=”01″ day=”01″ year=”2015″] С Новым годом! [/cdt]. До наступления указанной даты, будет показан счетчик обратного отсчета.

Включить поддержку шорткодов в цитатах и поиске

add_filter('the_excerpt', 'do_shortcode');
//удаление версии WordPress start 
function remove_wpversion() {
     return '';
}
add_filter('the_generator', 'remove_wpversion');
//удаление версии WordPress end

//удаление версии WordPress из ссылок на скрипты start
function wp_version_js_css($src) {
    if (strpos($src, 'ver=' . get_bloginfo('version')))
        $src = remove_query_arg('ver', $src);
    return $src;
}
add_filter('style_loader_src', 'wp_version_js_css', 9999);
add_filter('script_loader_src', 'wp_version_js_css', 9999);
//удаление версии WordPress из ссылок на скрипты end

Меняем стандартный адрес электронной почте

/*** Меняем адрес электронной почты **/
add_filter( 'wp_mail_from', 'wp_mail_from_example' );

function wp_mail_from_example( $email ) {
    return '[email protected]';
}

Удаляем ненужные meta данные и rrs

/*** Удалить meta **/
remove_action('wp_head', 'wlwmanifest_link');
remove_action('wp_head', 'adjacent_posts_rel_link_wp_head');
remove_action('wp_head', 'wp_shortlink_wp_head',10,0);

/*** Удалить rss ленты **/
function fb_disable_feed() {
wp_redirect(get_option('siteurl'));
}
add_action('do_feed', 'fb_disable_feed', 1);
add_action('do_feed_rdf', 'fb_disable_feed', 1);
add_action('do_feed_rss', 'fb_disable_feed', 1);
add_action('do_feed_rss2', 'fb_disable_feed', 1);
add_action('do_feed_atom', 'fb_disable_feed', 1);
remove_action( 'wp_head', 'feed_links_extra', 3 );
remove_action( 'wp_head', 'feed_links', 2 );
remove_action( 'wp_head', 'rsd_link' );

Скрыть атрибуты в главном меню

/*** Скрыть атрибуты в меню  **/
function my_menu_notitle( $menu ){
return $menu = preg_replace('/ title=\"(.*?)\"/', '', $menu );
 
}
add_filter( 'wp_nav_menu', 'my_menu_notitle' );
add_filter( 'wp_page_menu', 'my_menu_notitle' );
add_filter( 'wp_list_categories', 'my_menu_notitle' );

Скрыть поле сайт и email в комментариях

/*** Комментарии скрыть поле сайт **/
function remove_url_from_comments($fields) {
    unset($fields['url']);
    return $fields;
}
* Функция Удаляет поле сайт и email из комментариев */
add_filter('comment_form_default_fields', 'wp_url_remove');
function wp_url_remove($fields)
{
 if(isset($fields['url']))
 unset($fields['url']);
 return $fields;
}

 

Данные хуки способны значительно расширить функционал сайта и упростить их внедрение. При желании можно написать довольно интересные решения, экспериментируйте. Если у вас есть интересные решения или вопросы, смело публикуйте их в комментарии.

интересные посты

Как подключить Яндекс кассу на сайт с 54-Ф3
Разработка
0 репосты435 просмотры
Разработка
0 репосты435 просмотры

Как подключить Яндекс кассу на сайт с 54-Ф3

YouKit - Сен 07, 2017

Яндекс.Касса это готовое решение для получения платежей с банковских карт, электронных денег, терминалов на вашем сайте. (далее…)

Структура сайта • как сделать хорошую структуру сайта
Разработка
0 репосты286 просмотры
Разработка
0 репосты286 просмотры

Структура сайта • как сделать хорошую структуру сайта

YouKit - Авг 27, 2017

Один из этапов создания сайта — разработка его структуры (взаимосвязь и расположение всех элементов проекта). У разных сайтов в зависимости…

Как придумать УТП • Уникальное торговое предложение для сайта
Маркетинг
0 репосты483 просмотры
Маркетинг
0 репосты483 просмотры

Как придумать УТП • Уникальное торговое предложение для сайта

YouKit - Июн 15, 2017

Начну с того, что уникальное торговое предложение или УТП для сайта не нужно придумывать, оно должно быть сутью вашего бизнеса.…

Отправить ответ

Уведомлять
avatar
wpDiscuz

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: