Здравствуйте, сегодня представляю вам 12 полезных хуков (хаков, сниппетов, шорткоды) для wordpress сайтов.
Скачать исходники для статьи можно ниже
Хуки прописываем в файл functions.php, однако, предупреждаю, что неверное копирование или ошибка может заблокировать ваш сайт – поэтому советую проверить нижеуказанные коды на каком-нибудь тестовом сайте – можно воспользоваться бесплатным хостиногом, например hostinger, или другом хостинге.
1. Использование шорткодов (shortcode) в текстовом виджете:
Если добавить следующий код в файл functions.php, то в виджете “Текст” можно будет использовать шорткоды (shortcode):
add_filter( 'widget_text', 'do_shortcode' );
2. Задержка в публикации RSS ленты:
У вас когда-нибудь случалось такое, что вы опубликовали пост, а затем нашли ошибку, которую достаточно легко исправить, но… – уже поздно, так как для ваших подписчиков – ваш пост уже был опубликован в их RSS-каналах.
Как же создать задержку при публикации вашего нового поста в RSS ленту, чтобы дать себе время еще раз проверить все на ошибки – достаточно добавить этот фрагмент в файл functions.php:
function publish_later_on_feed($where) {
global $wpdb;
if ( is_feed() ) {
$time_now = gmdate('Y-m-d H:i:s');
$time_delay = '15'; // integer
$time_span = 'MINUTE'; //MINUTE, HOUR, DAY, WEEK, MONTH, YEAR
$where = " AND TIMESTAMPDIFF($device, $wpdb->posts.post_date_gmt, '$time_now') > $time_delay ";
}
return $where;
}
add_filter('posts_where', 'publish_later_on_feed');
В данном примере задержка – 15 минут.
3. Публикуем в RSS ленте миниатюры поста (thumbnail):
Намного красивее, когда в RSS ленте будет опубликована картинка, “говорящая” о содержании данной статьи.
add_filter('the_content_feed', 'rss_post_thumbnail');
function rss_post_thumbnail($content) {
global $post;
if( has_post_thumbnail($post->ID) )
$content = '<p>' . get_the_post_thumbnail($post->ID, 'thumbnail') . '</p>' . $content;
return $content;
}
4. Отключаем использование HTML тегов в комментариях:
Если спам доставляет вам очень много проблем, которые создают кучу исходящих ссылок с вашего сайта, то просто добавьте следующий код в файл functions.php:
// This will occur when the comment is posted
function plc_comment_post( $incoming_comment ) {
// convert everything in a comment to display literally
$incoming_comment['comment_content'] = htmlspecialchars($incoming_comment['comment_content']);
// the one exception is single quotes, which cannot be #039; because WordPress marks it as spam
$incoming_comment['comment_content'] = str_replace( "'", ''', $incoming_comment['comment_content'] );
return( $incoming_comment );
}
// This will occur before a comment is displayed
function plc_comment_display( $comment_to_display ) {
// Put the single quotes back in
$comment_to_display = str_replace( ''', "'", $comment_to_display );
return $comment_to_display;
}
add_filter( 'preprocess_comment', 'plc_comment_post', '', 1 );
add_filter( 'comment_text', 'plc_comment_display', '', 1 );
add_filter( 'comment_text_rss', 'plc_comment_display', '', 1 );
add_filter( 'comment_excerpt', 'plc_comment_display', '', 1 );
// This stops WordPress from trying to automatically make hyperlinks on text:
remove_filter( 'comment_text', 'make_clickable', 9 );
5. Вывод последних записей на странице:
Данный код позволит выводить в нужном месте сайта блок последних записей.
<?php query_posts($query_string . '&showposts=5' ); ?> <?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?> <div class="story"> <div class="story-content"> <h4><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h4> <?php the_excerpt(); ?> <?php endwhile; endif; ?>
Здесь showposts=5 – вывод 5 последних записей, можете поменять на нужное количество.
6. Изменяем логотип в панели управления wordpress (админке) на свой:
add_action('admin_head', 'custom_logo');
function custom_logo() {
echo '
<style type="text/css"><!--
#header-logo { background-image: url('.get_bloginfo('template_directory').'/images/custom-logo.gif) !important; }
--></style>';
}
, где
template_directory – корневая директория сайта,
images/custom-logo.gif – путь до логотипа.
7. Удаляем сообщение об ошибке – при неверном вводе логина и пароля на странице авторизации пользователей:
add_filter('login_errors',create_function('$a', "return null;"));
8. Скрываем версию wordpress, которая установлена на вашем сайте:
<?php
// Remove the WP version for extra WordPress Security
function remove_wp_version(){
return '';
}
add_filter('the_generator', 'remove_wp_version');
?>
9. Автоматическое выставление даты Copyright в конец страницы
Вы наверное замечали, что на некоторых сайтах, в подвале, находится информация об авторских правах – Copyright с датой основания сайта по текущий год, например: “Название сайта © 2011-2014”, но некоторые авторы сайтов не следят за отображение данной строки и информация в ней устаревает, чтобы этого не случилось можно воспользоваться следующим кодом:
Нижеуказанная функция ищет даты первого поста и дату вашего последнего поста, данный код вставляем в файл functions.php:
function comicpress_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;
}
Далее вам нужно в подвал вашего сайта (футер) – footer.php добавить в нужном месте следующую строчку:
<?php echo comicpress_copyright(); ?>
10. Меняем “Редактор” по умолчанию:
Изначально, при редактировании записи у нас открывается “Визуальный редактор”, однако, если вы больше предпочитаете работать с “HTML” (“Текст”) редактором, то можно воспользоваться следующим хуком – для этого добавьте в файл functions.php нужную сточку:
# Визуальный редактор по умолчанию
add_filter( 'wp_default_editor', create_function('', 'return "tinymce";') );
# HTML редактор по умолчанию
add_filter( 'wp_default_editor', create_function('', 'return "html";') );
11. Перенаправление пользователя сайта после авторизации:
Вы можете перенаправить пользователей, которые, авторизовалить на другой адрес в зависимости от их роли, используя этот фрагмент. Просто добавьте его в файл functions.php:
<?php function redirect_user_on_role() { //retrieve current user info global $current_user; get_currentuserinfo(); //If login user role is Subscriber if ($current_user->user_level == 0)
{
wp_redirect( home_url() ); exit;
}
//If login user role is Contributor
else if ($current_user->user_level > 1)
{
wp_redirect( home_url() ); exit;
}
//If login user role is Editor
else if ($current_user->user_level >8)
{
wp_redirect( home_url() ); exit;
}
// For other rolse
else
{
$redirect_to = 'http://google.com/';
return $redirect_to;
}
}
add_action('admin_init','redirect_user_on_role');
?>
12. Хук, который прописывает ссылку на ваш сайт:
<?php bloginfo('url'); ?>
Пример:
<a href="<?php bloginfo('url'); >/about">О компании</a>

