WordPress: 10 трюков для файла functions.php

В папке любого шаблона для WordPress много разных файлов, но основным считается functions.php. Он предназначен для некоторых уникальных PHP функций, предусмотренных в платформе WordPress. Этот файл позволяет изменять или совершенствовать свойства и функции WordPress без необходимости копаться в ядре системы:

Существует множество интересных способов, с помощью которых можно улучшить functions.php, и наша сегодняшняя статья посвящена как раз им.

1. Изменяем логотип в панели администрирования

Если вы создаете уникальный шаблон по заказу клиента, этот трюк может помочь. Все что нужно – добавить этот код внутрь файла functions.php:

//хук для изменения шапки административной панели
add_action('admin_head', 'my_custom_logo');
functionmy_custom_logo() {
echo '

';
}

2. Отключаем внутренний поиск по WordPress

Внутреннюю систему поиска WordPress можно отключить при помощи functions.php. Поисковик останется доступным, но не будет виден в боковой панели. Для этого нужно добавить следующий код в WordPress functions PHP:

functionfb_filter_query( $query, $error = true ) {

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

// to error
if ( $error == true )
$query->is_404 = true;
}
}

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

3. Используем RSS для управления доступностью опубликованных постов

Большая часть блогеров публикуют записи сразу после написания, а потом еще долгое время “отлавливают” опечатки и ошибки. Именно поэтому публикацию записей следует откладывать на 5-10 минут, и выводить ссылку в RSS-ленте только после того, как все ошибки будут исправлены. Чтобы получить такое преимущество, воспользуйтесь этим кодом:

functionpublish_later_on_feed($where) {
global $wpdb;

if ( is_feed() ) {
// дата и время в формате WP
$now = gmdate(‘Y-m-d H:i:s’);

// время ожидания; + device
$wait = ‘10′; // integer

// http://dev.mysql.com/doc/refman/5.0/en/date-and-time-functions.html#function_timestampdiff
$device = ‘MINUTE’; //MINUTE, HOUR, DAY, WEEK, MONTH, YEAR

// добавляем SQL-синтаксис к стандартной переменной $where
$where .= ” AND TIMESTAMPDIFF($device, $wpdb->posts.post_date_gmt, ‘$now’) > $wait “;
}
return $where;
}
add_filter(‘posts_where’, ‘publish_later_on_feed’);

4. Редактируем длину анонса записи (excerpt)

Анонс записи состоит не более чем из 55 слов, что создает определенные сложности для дизайнеров. Чтобы изменить длину анонса, воспользуйтесь следующей public function PHP:

functionnew_excerpt_length($length) {
return 100;
}
add_filter('excerpt_length', 'new_excerpt_length');

5. Отключаем RSS-ленту

Статическим сайтам на WordPress вовсе не нужна RSS-лента, и поэтому лучше отключить её при помощи следующей функции:

functionfb_disable_feed() {
wp_die( __('RSS-лента недоступна! Милости просим на главную страницу!') );
}

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);

6. Подключаем функцию миниатюры записи

В WordPress можно использовать миниатюры записей, страниц или категорий, которые делают страницы более презентабельными. Чтобы включить этот функционал, скопируйте следующий код и вставьте его в файл functions.php:

add_theme_support( 'post-thumbnails' );

В большинстве случаев размер миниатюр определяется настройками CMS, однако и этот момент подвластен тем, кто умеет работать с файлом WordPress functions.php.

Рассмотрим в качестве примера сайт журнала, на котором все миниатюры отображаются в трех разных размерах. Например, самую большую миниатюру можно использовать для свежих постов, средние миниатюры – для менее значимых записей, а маленькие миниатюры будут показываться только в виджетах.

Чтобы WordPress создавал несколько копий миниатюры изображения, нужно включить в код функцию add_image_size() и указать размеры.

Для этого необходимо вставить следующий код в файл functions.php:

// Обычный размер
add_image_size( 'regular', 400, 350, true );

// Средний размер
add_image_size( 'medium', 650, 500, true );

// Большой размер
add_image_size( 'large', 960, '' );

Загружаем jQuery из Google CDN
// динамичная загрузка jQuery 
add_action( 'init', 'jquery_register' );

// регистрация jQuery в Google
functionjquery_register() {

if ( !is_admin() ) {

wp_deregister_script( 'jquery' );
wp_register_script( 'jquery', ( 'https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js' ), false, null, true );
wp_enqueue_script( 'jquery' );
}
}

7. Убираем информацию об используемой версии CMS

// убираем отображение версии системы из шапки сайта и фидов
functioncomplete_version_removal() {
return '';
}
add_filter('the_generator', 'complete_version_removal');

Запрещаем доступ к функциям меню по логинам или ролям

Эту PHP static function можно использовать для того, чтобы запретить доступ к определенным функциям меню определенным пользователям:

{
$restricted = array(__('Posts'),
__('Media'),
__('Links'),
__('Pages'),
__('Comments'),
__('Appearance'),
__('Plugins'),
__('Users'),
__('Tools'),
__('Settings')
);
end ($menu);
while (prev($menu)){
$value = explode(' ',$menu[key($menu)][0]);
if(in_array($value[0] != NULL?$value[0]:"" , $restricted)){unset($menu[key($menu)]);}
}// end while

}// end if
}
add_action('admin_menu', 'ah_remove_menus');

8. Настройка длины анонса записи

Как я уже сказал, стандартная длина анонса записи составляет 55 слов, но можно скорректировать это значение при помощи следующего сниппета:

functionnew_excerpt_length($length) {
return 150;
}

add_filter('excerpt_length', 'new_excerpt_length');

9. Динамическая информация об авторском праве в подвале

Многие сайты не придают значения информации об авторских правах. Некоторые даже не указывают годы работы ресурса. Не стоит недооценивать эту возможность, так как формат © 2012-2017 добавляет сайту репутации. Я решил упростить эту задачу, и теперь можно просто скопировать данный фрагмент кода в файл WordPress functions php:

/*  - */
functionah_dynamic_copyright() {
global $wpdb;
$copyright_dates = $wpdb->get_results("
SELECT
YEAR(min(post_date_gmt)) AS firstdate,
YEAR(max(post_date_gmt)) AS lastdate
FROM
$wpdb->posts
WHERE
post_status = 'publish'
");
$output = '';
if($copyright_dates) {
$copyright = "© " . $copyright_dates[0]->firstdate;
if($copyright_dates[0]->firstdate != $copyright_dates[0]->lastdate) {
$copyright .= '-' . $copyright_dates[0]->lastdate;
}
$output = $copyright;
}
return $output;
}

10. Дополняем профили авторов произвольными полями

Напоследок хочу поделиться полезной PHP function, которая позволяет добавлять произвольные поля и информацию в профиль авторов:

functionah_new_contactmethods( $contactmethods ) {
// Ссылка на Twitter
$contactmethods['twitter'] = 'Twitter';
// Ссылка на Facebook
$contactmethods['facebook'] = 'Facebook';
return $contactmethods;
}
add_filter('user_contactmethods','ah_new_contactmethods',10,1);