
Поговорим о файле functions.php.
Казалось бы, функции вынесенные во внешний файл, что тут необычного?
Прежде всего – эти функции имеют максимальный приоритет, то есть обрабатываются в самом начале загрузки страницы.
Это значит, что собрав в functions.php все мелкие функции из часто используемых плагинов мы можем слегка разгрузить сервер и уменьшить время загрузки страницы.
Например, плагин maxsite-memory-usage.php от Макса определяет объём использованной памяти и количество запросов, а состоит всего из четырёх строк:
add_action(‘wp_footer’, ‘maxsite_memory_usage’);
function maxsite_memory_usage() {
if ( function_exists(‘memory_get_usage’) ) echo ‘ Потребление памяти: ‘ . round(memory_get_usage()/1024/1024, 2) . ‘MB’;
}
При вызове функции в виде плагина происходит обращение к базе данных; та же функция, записанная в functions.php позволяет сократить количество запросов к базе данных и выполнить тот же код. И редактировать самые используемые функции из одного файла проще, чем рыться в папке /plugins/
Мелочь? Да, если эта функция одна. А если их десяток – это уже, как минимум сокращение на десять запросов к базе данных.
Что сюда можно добавить? Любой код, как из плагинов, так и собственный:
Начнём с кода файла index.php, выдернутого наугад из первой попавшейся темы:
//Окончания слова “комментарий” – то есть, “2 комментария”, “5 комментариев” и так далее.
function russ_comments_number($zero = false, $one = false, $more = false, $deprecated = ”) {
global $id;
$number = get_comments_number($id);
if ($number == 0) {
$output = ‘Прокомментируете?’;
}
elseif ($number == 1) {
$output = ‘1 комментарий’;
}
elseif (($number > 20) && (($number % 10) == 1)) {
$output = str_replace(‘%’, $number, ‘% комментарий’);
}
elseif ((($number >= 2) && ($number <= 4)) || ((($number % 10) >= 2) && (($number % 10) <= 4)) && ($number > 20)){
$output = str_replace(‘%’, $number, ‘% комментария’);
}
else {
$output = str_replace(‘%’, $number, ‘% комментариев’);
}
echo apply_filters(‘russify_comments_number’, $output, $number);
}
add_filter(‘comments_number’, ‘russ_comments_number’);
//Блокировка своего собственного пинга
function no_self_ping(&$links) {
$home = get_option( ‘home’ ); foreach ( $links as $l => $link ) if ( 0 === strpos( $link, $home ) ) unset($links[$l]);
}
add_action( ‘pre_ping’, ‘no_self_ping’ );
//Удаление дубликатов содержимого из обхода поисковых роботов
$index_category_pages = true;
function seofriend_wp_head() {
global $index_category_pages;
if($index_category_pages){
if( ( (is_single() || is_page() || is_home()) && (!is_paged()) ) || is_category()){
echo “<meta name=”robots” content=”index,follow” />n”;
}else{
echo “<meta name=”robots” content=”noindex,follow” />n”;
}
}else{
if((is_single() || is_page() || is_home()) && (!is_paged())){
echo “<meta name=”robots” content=”index,follow” />n”;
}else{
echo “<meta name=”robots” content=”noindex,follow” />n”;
}
}
}
add_action(‘wp_head’, ’seofriend_wp_head’);
//Добавление социальных закладок в записи. В нужном месте вставить <?php social(); ?>
function social() {
$u = urlencode(get_permalink());
$t = get_the_title();
$social=<<<EOF
function so(u,t) {
for (i=0; i<s.length; i=i+2) document.write(‘<a title=”Добавить закладку на эту статью Levati’s blog-а в ‘+s[i]+’” href=”http://’+s[i]+’/'+s[i+1].replace(‘{u}’,u).replace(‘{t}’,t)+’” target=”_blank”>’+
‘<img src=”путь_к_папке_с_иконками’+s[i]+’.ico” border=”0? alt=”Добавить в ‘+s[i]+’” width=”16? height=”16? /></a>’);
}
var s=new Array(“del.icio.us”,”post?url={u}&title={t}”, “news2.ru”,”add_story.php?url={u}”, “google.com”,”bookmarks/mark?op=edit&bkmk={u}&title={t}”, “bobrdobr.ru”,”add.html?url={u}&title={t}”, “memori.ru”,”link/?sm=1&u_data[url]={u}&u_data[name]={t}”, “moemesto.ru”,”post.php?url={u}&title={t}”, “mister-wong.ru”,”add_url/?bm_url={u}&bm_description={t}”, “rumarkz.ru”,”bookmarks/?action=add&popup=1&address={u}&title={t}&description={t}”, “rucity.com”,”bookmarks.php?action=add&address={u}&title={t}&description=”, “linkstore.ru”,”servlet/LinkStore?a=add&url={u}&title={t}”, “myscoop.ru”,”add/?title={t}&URL={u}”, “vaau.ru”,”submit/?action=step2&url={u}”, “newsland.ru”,”News/Add/type/news/”);
EOF;
echo <<<EOF
<p class=”social”><script type=’text/javascript’>$social so (‘$u’, encodeURIComponent(‘$t’));</script></p>
EOF;
}
//Напоминание об RSS-подписке
function subscribe_remind($content) {
if ( !is_feed() && !is_page() && !is_home() && !is_search() && !is_archive() && !is_author() && !is_category() && !is_paged())
$content .= ‘<div id=”remind”>Будьте в курсе новостей сайта, <a href=”url_Вашей_RSS_ленты”>Подпишитесь на RSS ленту</a>!</div>’;
return $content;
}
add_filter(‘the_content’, ’subscribe_remind’, 999);
Второе применение functions.php – виджеты. Собственно, добавляется еще одна функция, которая определяет блоки в теме оформления сайта, настраиваемые из админпанели. Весь её код:
if ( function_exists(‘register_sidebar’) )
register_sidebar(array(
‘before_widget’ => ‘<div>’, //тег перед виджетом
‘after_widget’ => ‘</div>’, //тег после виджета
‘before_title’ => ‘<h2>’, //тег перед заголовком виджета
‘after_title’ => ‘</h2>’, //тег после заголовка виджета
));
Виджеты – это находка для любящих поэкспериментировать: лучше, если справа вывести рубрики и ссылки, а слева архив и поиск, или если наоборот поменять? А может… вот именно виджетизированный скин и подойдёт для определения “может” и “не может”.
Если же Вы точно знаете, чего хотите – пропишите это в теме статически и сэкономьте еще немного памяти.
PS: За давностью коллекции некоторые авторы утеряны, но примазываться к чужой славе не по-взрослому, потому, если в перечне кто-то узнает свои функции – в комментарии укажите ссылку на оригинал, в записи я поставлю его напрямую.
Читайте в этой серии:
Скин для WP своими руками (Вводная часть)
Скин для WP своими руками (header.php)
Скин для WP своими руками (footer.php)
Скин для WP своими руками (sidebar.php)
Скин для WP своими руками (comments-popup.php)
Скин для WP своими руками (search.php)
Скин для WP своими руками (оставшиеся мелочи.php)
Скин для WP своими руками. (Вводная в дизайн)
Скин для WP своими руками. (css — финальный аккорд)
Тема для WordPress — иерархия
Тема для WordPress — CSS
Тема для WordPress — функции
Тема для WordPress – цикл