Полезные функции WordPress

17.10.2012

Полезные функции Wordpress

Не так давно поменял шаблон на блоге, это происходит редко, поэтому я стараюсь максимально его задействовать, не применяя плагинов. Хотя я не сторонник позиции «без плагинов», есть функции, которые встроить в шаблон — хорошая идея. Сегодня я хочу выложить свои функции WordPress, которые я использовал при разработке шаблона.

Когда-то давно я писал подобную статью, но с позиции нынешнего опыта — она кажется мммм… Не такой как нужно и направлена она скорее на визуальные функции. Сегодня речь пойдет о «технической» стороне вопроса. А ту я когда нибудь переделаю
Функции в этом списке — не новы, используются во многих премиум-шаблонах, появляются в других подобных подборках. Я преследовал одну цель — собрать в кучу то, что я использую у себя или на клиентских проектах, чтобы не искать по всей Сети в нужный момент.

Перенаправление на результат поиска

Часто бывает так, что стандартный поиск WP выдает в результатах всего одну запись. У меня это случается при поиске по имени шаблона, к примеру. Логично будет перенаправить посетителя сразу же к этой записи, не выводя список результатов поиска.

add_action('template_redirect', 'redirect_search');
function redirect_search() {
    if (is_search()) {
        global $wp_query;
        if ($wp_query->post_count == 1) {
            wp_redirect( get_permalink( $wp_query->posts['0']->ID ) );
        }
    }
}

Удаляем стандартные размеры загружаемых изображений

Я не использую размеры, которые WP мне предлагает по умолчанию. Можно смело их удалить…

function remove_default_image_size( $size) {
    unset( $size['thumbnail']);
    unset( $size['medium']);
    unset( $size['large']);
    return $size;
}
add_filter('intermediate_image_sizes_advanced','remove_default_image_size');

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

Добавляем свои размеры изображений

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

if ( function_exists( 'add_image_size' ) ) {
  add_image_size('имя1', 200, 9999 ); //200 - ширина, высота не ограничена
  add_image_size('имя2', 220, 180, true ); //(обрезка под размер, true)
}

Такую функцию я использую для добавления картинок, использующихся в виджете лучших записей, изменение размера «на лету» — плохая идея для быстродействия блога.
Использовать добавленный размер можно примерно так:

if ( has_post_thumbnail() ){
   the_post_thumbnail( 'имя1' );
}

Изменяем текст «Введите заголовок»

Как вы знаете, WordPress поддерживает пользовательские типы записей, это могут быть отзывы клиентов, продукты и многое другое. Можно поменять стандартный заголовок при вводе новой записи, адаптировать его под тип записи.
Редактируем заголовок

function default_product_title( $title ){
     $screen = get_current_screen();
     if  ( $screen->post_type == 'product' ) {
          return 'Введите название продукта';
     }
}
add_filter( 'enter_title_here', 'default_product_title' );

Этот код меняет заголовок для гипотетического типа записи «Продукты». Для замены этого текста в стандартных записях нам понадобится вот такая функция:

function title_custom( $title ){
     return $title = 'Что-то интересное';
}
add_filter( 'enter_title_here', 'title_custom');

Изменяем стандартный Email отправки

WordPress иногда присылает мне письма с разными оповещениями, при этом в качестве отправителя там указан я сам. Это не совсем «красиво» и вызывает сложности(несущественные, но все же) при автоматической сортировке почты. Эту ситуацию легко исправить:

add_filter('wp_mail_from', 'new_mail_from');
add_filter('wp_mail_from_name', 'new_mail_from_name');

function new_mail_from($old) {
return 'vasya@site.ru';//указываем нужный адрес
}
function new_mail_from_name($old) {
 return 'Vasya blog'; //указываем нужное имя
}

Меняем текст в футере админ-панели

Вы наверняка видели надпись «Спасибо вам за творчество с WordPress» в футере админ-панели. Мне она порядком надоела, хоть и не бросается в глаза. Менять ее или нет — дело ваше, я сменил вот так:

function remove_footer_admin () {
    echo "GB:Make web better";//ваш текст
} 
add_filter('admin_footer_text', 'remove_footer_admin'); 

Стандартное cжатие JPEG

Я готовлю изображения для каждой записи блога самостоятельно, мне не нужна помощь движка в этом. Однако, WordPress пытается мне помочь и дополнительно сжимает картинки, аналогично он поступает при генерации миниатюр(смотрим чуть выше, про создание и удаление размеров изображений). Можно попросить его не делать этого, используя такой код:

add_filter('jpeg_quality',function($arg){return 100;});

Вместо цифры — подставляйте необходимое вам значение, я оставил 100.

Добавляем поля для дополнительных контактов

Эту функцию я не использовал на этом блоге, однако она успешно работает на одном из клиентских проектов. По умолчанию, WordPress предлагает небогатый выбор контактных данных:
Контакты
Тем более, в нашей стране они не совсем актуальны. Я добавил два дополнительных поля, для Вконтакте и Твиттера:

function my_user($user_contactmethods){
  $user_contactmethods['Twitter'] = 'Twitter URL';
  $user_contactmethods['VK'] = 'Вконтакте URL';
  return $user_contactmethods;
}
add_filter('user_contactmethods', 'my_user');

Аналогично можно добавить необходимые вам поля. Но как же быть со старыми, ненужными полями? Очень просто, смотрим усовершенствованный код:

function my_user($user_contactmethods){
/*удаляем ненужное*/
  unset($user_contactmethods['aim']);
  unset($user_contactmethods['yim']);
  unset($user_contactmethods['jabber']);
/*добавляем нужное*/
  $user_contactmethods['twitter'] = 'Twitter URL';
  $user_contactmethods['VK'] = 'Вконтакте URL';
  return $user_contactmethods;
}
add_filter('user_contactmethods', 'my_user');

Теперь у нас примерно такая картина:
Обновленные контакты
Вывести эту информацию в коде можно таким образом:

echo get_user_meta(1, 'VK', true);

Эту функцию WordPress можно использовать не только для контактов, я вывожу подобным кодом направления работы архитекторов, к примеру. Включаем фантазию и создаем волшебные вещи

Отдаем миниатюру в RSS

Это вообще «бородатая» функция, однако в самописном шаблоне обязательна, поэтому я добавил ее в этот список. Думаю, не нужно объяснять, зачем она нужна?

function rss_post_thumbnail($content) {
    global $post;
    if(has_post_thumbnail($post->ID)) {
        $content = '<p>' . get_the_post_thumbnail($post->ID) .
        '</p>' . get_the_content();
    }
    return $content;
}
add_filter('the_excerpt_rss', 'rss_post_thumbnail');
add_filter('the_content_feed', 'rss_post_thumbnail');

Даем блогу больше воздуха

Эта функция WordPress не совсем функция, точнее, совсем даже не функция. Однако, она может быть полезна при некоторых обстоятельствах. Мне вот недавно на VPS увеличили размер оперативной памяти, а почему бы не побаловать блог, ведь памяти лишней не бывает. Тем более, WordPress достаточно требователен к оперативке. Отлично, добавим вот такой код в файлик wp-config, который лежит в корне сайта:

define('WP_MEMORY_LIMIT', '128M');

По умолчанию, WP использует 32М оперативной памяти, но если есть еще — почему бы не дать ему вздохнуть свободнее? Однако учитывайте еще такой факт — это значение не будет работать, если в php.ini(настройки PHP у хостера) стоит значение меньше, чем вы указали. Будет использовано именно оно. Так что код актуален больше для хостингов уровня VPS и выше.

Вот и все на сегодня. Надеюсь, было познавательно…
Удачного дня

, ,

Комментариев: 8

  1. Сергей

    Надпись «Спасибо Вам за творчество с WordPress» мешает написанию статьи, т.к. находится в не положенном месте

    Ответить
  2. Сергей

    Комментарий в футере с сылкой убрал, а как в правой части футера убрать название например «Версия 3.4.2»???

    Ответить
  3. SiteBox

    Стандартное cжатие JPEG у меня почему то не заработало и если я добавляю эту строчку в functions.php сайт вылетает полностью, с ошибкой
    Parse error: syntax error, unexpected T_FUNCTION in /название_сайта/www/wp-content/themes/название_темы/functions.php on line 5

    Что я делаю не так?

    Ответить
    • GerinG

      Честно говоря, похоже на ошибку синтаксиса, собственно как и пишется в сообщении. Я бы проверил написание. Бросьте в почту, я гляну что там .

      Ответить
  4. Olunka

    Такие вкусности, подскажите куда надо вставлять тот код, который вы написали в статье.
    В какую именно страницу шаблона и можно ли все вписать вверху или внизу страницы?

    Ответить
    • GerinG

      Это код для файла functions.php, который находится в папке шаблона. Если файла нет — просто создаем его и добавляем код

      Ответить
  5. WB-Nox

    Привет, спасибо за статью.
    Оч охота увидеть подборку бесплатных шаблонов за октябрь.
    З.Ы. Скажи пожалуйста,, сможешь подсказать пару вопросов по шаблону, постоянному читателю?

    Ответить
    • GerinG

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

      Ответить