7 сниппетов, которые всегда есть в моих сборках WordPress

Довольно часто при использовании 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('<span style="font-size: 24px;">&nbsp;&#10048;&nbsp;</span>', '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++ и прочее, прочее, прочее …

Собственный логотип на странице входа

2016-08-12_08-32-34
Логотип Worgpress на форме подключения, как правило, раздражает владельцев сайтов. Он явно намекает, что владелец не вложил особых трудов в кодирование, предпочитает типовой функционал и не желает тратиться на что-то оригинальное. Ну, и кроме того, это наносит ощутимый урон бренду владельца. Поэтому, на всех своих сайтах я обязательно заменяю логотип WP на свой, оригинальный. Посмотрите, как это выглядит.

function my_custom_login_logo(){
	echo '<style type="text/css">
	h1 a { background-image:url('.  get_stylesheet_directory_uri() .'/images/waksoft-login-logo.png) !important; }
	</style>';
}
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	= '<br>Требуется регистрация для доступа к контенту. <a href="/wp-login.php?action=register">Регистрация</a>, если Вы уже зарегистрированы &mdash; <a href="/wp-login.php">подключитесь</a>';
	if ( is_user_logged_in() && !is_null( $content ) && !is_feed() )
		return $content;
	return $str;
}

add_shortcode( 'hide', 'wks_member_check_shortcode' );

Теперь можно использовать короткий код в тексте записи или страницы для защиты содержания:
[member]Этот текст будет выводиться только зарегистрированным читателям.[/member]

Успехов в эксплуатации WordPress!

CC BY-NC 4.0 7 сниппетов, которые всегда есть в моих сборках WordPress, опубликовано waksoft, лицензия — Creative Commons Attribution-NonCommercial 4.0 International.


Респект и уважуха

Добавить комментарий