Довольно часто при использовании CMS WordPress, в качестве движка сайта самой разной тематики встречаются задачки, которые не заслуживают разработки отдельного приложения или плагина. И вот тогда на помощь приходит сниппетએ — фрагмент исполняемого кода, вставленный в нужное место. Для WP это нужное место файл function.php
активной темы. Здесь несколько небольших фрагментов кода на PHP, актуальность которых не вызывает никаких сомнений в силу острой необходимости их функционала.
Показываем верхнюю панель всегда для всех пользователей
Использование admin-bar для всех читателей WP довольно удобно (по умолчанию она показывается только залогиненным читателям). Панель всегда вверху экрана, её можно раскрасить в соответствии с дизайном вашего сайта (что вы здесь наблюдаете), добавить свои меню, уже есть поисковая строка и многое другое. Так, например, популярный плагин BoddyPress показывает её всегда после установки и активирования.
function wks_login_adminbar( $wp_admin_bar) { if ( !is_user_logged_in() ) $wp_admin_bar->add_menu( array( 'title' => 'Вход/Регистрация', 'href' => wp_login_url() ) ); } add_action( 'admin_bar_menu', 'wks_login_adminbar' ); add_filter( 'show_admin_bar', '__return_true', 1000 );
Кстати, очень частый вопрос: как «раскрасить» верхнюю панель? — Довольно просто… В файл style.css
темы этого сайта вставлен следующий код:
/* Постоянный админбар */ #wpadminbar .ab-icon, #wpadminbar .ab-item:before, #wpadminbar>#wp-toolbar>#wp-admin-bar-root-default .ab-icon { font: 400 1.4em/1 dashicons; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; } #wpadminbar { background: #99B2DD; height: 3em; padding: 0.3em; } #wpadminbar .quicklinks .ab-empty-item, #wpadminbar .quicklinks a, #wpadminbar .shortlink-input { font-family: BebasNeueBook; color: white; } #wpadminbar .ab-label { font-family: BebasNeueBook; }
Думаю принцип понятен. Для элемента с именем wpadminbar
можно определить параметры селекторов и объектов, которые относятся к родительскому.
Убираем меню WordPress (logo menu) из admin-bar
Как я уже говорил, использование admin-bar для всех читателей WP довольно удобно. Но есть одно НО! На admin-bar обязательно присутствует меню WP, содержащее ссылки на ресурсы движка. Это многих раздражает, они нужны только разработчику, а не любопытствующему читателю. Да и с точки зрения безопасности не есть cool, зачем сразу подсказывать злодеям о том, что у вас под капотом и как эффективнее поломать сайт. Надо бы его убрать! Но как? Есть два варианта — 1) подправить исходные файлы движка, но при автообновлении WP высока вероятность просмотреть этот момент, и 2) вставить в файл function.php
вашей темы следующий код:
function my_admin_bar_render() { global $wp_admin_bar; $wp_admin_bar->remove_menu('wp-logo'); } add_action( 'wp_before_admin_bar_render', 'my_admin_bar_render' );
В переводе с PHP на русский получается — На «крючок» wp_before_admin_bar_render
вешается обработчик my_admin_bar_render
, где из глобального объекта $wp_admin_bar
удаляется меню с именем wp‑logo
. Понятно? Всё просто, не правда ли?
Добавляем собственное меню в админбар
Немного кода для для размещения своего собственного меню в admin bar:
class MyLinksMenu {
function MyLinksMenu() {
add_action('admin_bar_menu', array($this, "my_links"));
}
function add_root_menu($name, $id, $href = FALSE) {
global $wp_admin_bar;
$wp_admin_bar->add_menu( array(
'id' => $id,
'title' => $name,
'href' => $href ) );
}
function add_sub_menu($name, $link, $root_menu, $meta = FALSE) {
global $wp_admin_bar;
$wp_admin_bar->add_menu( array(
'parent' => $root_menu,
'title' => $name,
'href' => $link,
'meta' => $meta) );
}
function my_links() {
$this->add_root_menu(' ❀ ', 'mylnk');
$this->add_sub_menu("НИУ Южно-Уральский государственный университет", "http://susu.ru", "mylnk");
$this->add_sub_menu("Высшая школа экономики и управления", "http://hsem.susu.ru", "mylnk");
$this->add_sub_menu("Кафедра Информационные технологии в экономике", "http://is.susu.ru", "mylnk");
$this->add_sub_menu("Бизнес-информатика в Челябинске", "http://business-inform.susu.ru", "mylnk");
$this->add_sub_menu(get_bloginfo('name'), home_url(), "mylnk");
}
}
add_action("init", "myLinkMenuInit");
function myLinkMenuInit() {
global $myLnk;
$myLnk = new MyLinksMenu();
}
Склонение слов после числительных
Жутко не люблю, когда при построении фразы с использованием числительных слова после них не склоняются. Нередко, особенно в локализованных для России приложениях, можно увидеть такие фразы: «До истечения лицензии осталось 2 дней» или «В вашем заказе 1 товаров». Как Вам? — Неправильно это!
Так что, эта задачка встречается практически всегда при написании своих приложений. Вот вам код, который успешно справляется с ней:
$_plural_years = array('год', 'года', 'лет'); $_plural_months = array('месяц', 'месяца', 'месяцев'); $_plural_days = array('день', 'дня', 'дней'); $_plural_times = array('раз', 'раза', 'раз'); $_plural_days = array('день', 'дня', 'дней'); $_plural_students = array('студент', 'студента', 'студентов'); function plural_type($n) { return ($n%10==1 && $n%100!=11 ? 0 : ($n%10>=2 && $n%10<=4 && ($n%100<10 || $n%100>=20) ? 1 : 2)); }
Идея проста, для каждого слова, которое требует склонения после числительных, создаётся массив с тремя словоформами, для 1, 2 и 5. После чего, описанную выше функцию можно использовать в нужном месте:
ПРИМЕР ИСПОЛЬЗОВАНИЯ: $var = 1; echo $var.' '.$_plural_years[plural_type($var)]; //1 год $var = 3; echo $var.' '.$_plural_days[plural_type($var)]; //3 дня $var = 5; echo $var.' '.$_plural_months[plural_type($var)];//5 месяцев $var = 8; echo $var.' '.$_plural_times[plural_type($var)];//8 раз
Кстати, эту идею можно транслировать на любой язык программирования высокого уровня, java, javascripp, C, C++ и прочее, прочее, прочее …
Собственный логотип на странице входа
Логотип Worgpress на форме подключения, как правило, раздражает владельцев сайтов. Он явно намекает, что владелец не вложил особых трудов в кодирование, предпочитает типовой функционал и не желает тратиться на что-то оригинальное. Ну, и кроме того, это наносит ощутимый урон бренду владельца. Поэтому, на всех своих сайтах я обязательно заменяю логотип WP на свой, оригинальный. Посмотрите, как это выглядит.
function my_custom_login_logo(){ echo ''; } add_action('login_head', 'my_custom_login_logo'); add_filter( 'login_headertitle', create_function('', 'return "' . get_bloginfo('name') . '";') );//меняем title логотипа add_filter( 'login_headerurl', create_function('', 'return get_home_url();') );//меняем ссылку с wordpress.org на свой
Редирект на главную страницу после подключения
Сразу после подключения к сайту на WP пользователь попадет в консоль административной панель, что у рядовых пользователей вызывает шок. Особенно в первый раз, сайт с красивым дизайном превращается в невыразительную серую консоль с совершенно непонятным меню, отличным от главного меню сайта и какими-то панельками с не совсем ясными комментариями. Избежать этого и вернуть читателя на фронт-энд позволит следующий код:
function redirect_to_home($url) { return get_option('home'); } add_filter('login_redirect','redirect_to_home');
Скрываем фрагменты текста от всех, кроме зарегистрированных читателей
Довольно часто бизнес-процессы сайта требуют скрыть статью и часть статьи от незарегистрированных читателей, например, вы заинтриговали своим контентом и хотите превратить просто читателя в подписчика. Так вот, если нужно создать содержание, которое смогут просматривать только зарегистрированные пользователи, то следующий короткий код поможет решить задачу. Скопируйте код в файл functions.php
своей темы:
function wks_member_check_shortcode( $atts, $content = null ) { $str = '
Требуется регистрация для доступа к контенту. Регистрация, если Вы уже зарегистрированы — подключитесь'; if ( is_user_logged_in() && !is_null( $content ) && !is_feed() ) return $content; return $str; } add_shortcode( 'hide', 'wks_member_check_shortcode' );
Теперь можно использовать короткий код в тексте записи или страницы для защиты содержания:
[member]Этот текст будет выводиться только зарегистрированным читателям.[/member]
Успехов в эксплуатации WordPress!
7 сниппетов, которые всегда есть в моих сборках WordPress, опубликовано К ВВ, лицензия — Creative Commons Attribution-NonCommercial 4.0 International.
Респект и уважуха