Меняем формат вывода плагина WP-PostRatings

Плагин WP-PostRatings использует функцию number_format_i18n() для вывода рейтинга в числовом виде, используя данные локали. В русском варианте цифры выглядят так: «Рейтинг статьи 4,80 из 5». Как программисту, мне неприятно было видеть запятую в виде разделителя и лишний ноль в конце. Хотя математически все соответствует русским стандартам.

Существует способ поменять формат вывода, но для этого придется править исходники плагина.

Процедура довольно простая: открываем файл wp-postratings/wp-postratings.php в редакторе плагинов. Находим такие строчки:

$value = str_replace("%RATINGS_MAX%", number_format_i18n($ratings_max), $value);
$value = str_replace("%RATINGS_AVERAGE%", number_format_i18n($post_ratings_average), $value);

И меняем функцию number_format_i18n() на number_format():

$value = str_replace("%RATINGS_MAX%", number_format($ratings_max, 1, '.', ''), $value);
$value = str_replace("%RATINGS_AVERAGE%", number_format($post_ratings_average, 1, '.', ''), $value);

После этой процедуры рейтинг будет выводится так: «Рейтинг статьи 4.8 из 5.0». Число в скобках означает количество цифр после запятой.

Какие я использую плагины для WordPress — 2

Пришло время обновить стаью «Какие я использую плагины для WordPress». С тех много воды утекло, я стал более опытным в программировании php/js/html. :) Некоторые плагины остались, появилось несколько новых, другие удалены за ненадобностью.

Akismet

Плагин для проверки комментариев к статьям на спам. На текущий момент на моем сайте заблокированно 13098 спам-комментариев. Идет в стандартной поставке WordPress. Категорически рекомендую его включать, иначе ваш блог, благодаря спамерам, моментально превратится в помойку.

Broken Link Checker

Плагин для проверки битых ссылок на вашем сайте. У меня он находится в выключенном состоянии и я его периодически включаю и запускаю проверку вручную. Выключен потому что тормозит админку WordPress.

Disable Emojis

Плагин для отключения новомодных смайликов, которые появились в версии WordPress 4.2. Причина отключения — графические смайлики не использую :)

Duplicator

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

FD Feedburner Plugin

Плагин для переадресации RSS потока на сайт feedburner.com. Хотя RSS, насколько я знаю, помаленьку отмирает.

FileBrowser

Плагин для редактирования файлов на сайте. Иногда бывает недоступна админка провайдера (с мобильника, например), поэтому пользуюсь им. Находится в выключенном состоянии.

Google XML Sitemaps

Плагин для создания карты сайта sitemap.xml, который используется поисковыми роботами и ворами контента.

Heartbeat Control

Плагин для отключения лишних запросов к wp-admin/admin-ajax.php, которые лишний раз нагружают сервер.

Inline Javascript Plugin

Плагин для вставки рабочего фрагмента на языке JavaScript. Примеры можно посмотреть в статьях:

Jetpack от WordPress.com

Плагин Jetpack предоставляет собой набор различных функций для сайта. Лично я использую в нем модули для подключения Android приложения WordPress, статистики сайта и мобильной темы. Также позволяет связать свой автономный блог с сайтом WordPress. По итогам года рисует замечательную статистику: «Ежегодный отчёт от Jetpack».

LiveJournal Crossposter

Плагин для автоматического кросс-постинга статей в ЖЖ. Периодически перестает нормально работать, но другие плагины работают еще хуже.

Mail From

Плагин для формирования обратного адреса писем, которые рассылает WordPress.

P3 (Plugin Performance Profiler)

Плагин для проверки скорости работы других плагинов. У меня он находится в выключенном состоянии и периодически включается для проверки. Именно с его помощью выяснил, что Broken Link Checker тормозной.

Pagination Rel Links

Плагин для проставления ссылок на соседние страницы. Этим иногда пользуется браузер, чтобы жрать трафик заранее загружать страницы, на которые пользователь может пойти.

PHP Code Widget

Плагин для вставки PHP кода в виджет. Установлен исключительно для показа погоды YoWindow. Пример кода можно посмотреть в статье: «Добавил виджет с погодой от YoWindow».

Theme Check

Плагин для проверки темы на соответствие стандартам WordPress. Установлен для проверки самописной темы. Простому обывателю бесполезен.

Tools for blog2k

Плагин для различного функционала для моего блога. Грузит стили для мобильной версии, загружает Яндекс.Метрику и Google Analytics, переносит загрузку jQuery в конец страницы. Также позволяет вставлять спойлеры вот такого вида:

Как тебе новый детектив?
Убийца — садовник!

W3 Total Cache

Плагин для кеширования. Позволяет объединять все скрипты в один файл и стили. Оптимизирует работу с БД. Создает статические версии всех страниц сайта, что позволяет ускорить загрузку в несколько раз.

WordPress Popular Posts

Плагин для показа популярных страниц сайта. Использую его в виде виджета справа.

WP-PostRatings

Плагин позволяет пользователям проставлять рейтинг каждой заметки. Процесс установки подробно, с картинками описывается в блоге: Константина Хмелёва. На всякий случай себе голосовать запретил. Понравилась статья? Поставьте звездочку :)

WP-Syntax

Плагин для подсветки синтаксиса. В основном использую его в рубрике «Программирование» для подсветки различного кода на C/C++, JavaScript, PHP и так далее.

WP LaTeX

Плагин для отображения формул в формате LaTeX (E=mc^2). Если кто не знает — LaTeX читается по-русски как «ЛаТеХ» и никакого отношения к резиновому изделию номер два не имеет. :)

Yet Another Related Posts Plugin

Плагин показывает похожие страницы. Использую в виде виджета справа. Этот виджет отображается только во время просмотра статьи.

Добавляем кнопки «Мне нравится» от Facebook, ВКонтакте, Twitter

Сегодня я расскажу, как добавить кнопки социальных сетей в свой WordPress блог так, чтобы они не тормозили загрузку и отрисовку страницы. Заранее хочу предупредить, что не являюсь специалистом ни в HTML, ни в JavaScript, ни в Php. Все решения собраны по крупицам на просторах интернета.

Чтобы оказывать меньше влияния на скорость загрузки блога, все скрипты социальных сетей и служебные HTML-элементы вынесены в конец страницы сразу после вызова wp_footer().

Для того, чтобы скрипты не влияли на отображение страницы, вся работа с ними происходит только после полной загрузки блога, для этого используется библиотека jQuery, которая присутствует в каждой поставке WordPress, и событие document.onload.

Таким образом, все скрипты живут в footer.php после вызова wp_footer() в таком обрамлении:

<script type="text/javascript">
jQuery(window).load(function() {
  /*
   * Сюда мы будем добавлять скрипты социальных сетей
   */
}
</script>

Все социальные кнопки у меня используются только в постах, поэтому их HTML-элементы добавлены в single.php сразу после вызова функции the_content().

ВКонтакте

Идем на страницу виджета, где выбираем внешний вид кнопки. У меня получился вот такой код:

<!-- Put this script tag to the <head> of your page -->
<script type="text/javascript" src="//vk.com/js/api/openapi.js?115"></script>
 
<script type="text/javascript">
  VK.init({apiId: 3904727, onlyWidgets: true});
</script>
 
<!-- Put this div tag to the place, where the Like block will be -->
<div id="vk_like_example"></div>
<script type="text/javascript">
VK.Widgets.Like("vk_like_example", {type: "button", height: 20});
</script>

Забираем отсюда div, который выглядит так:

<div id="vk_like_example"></div>

И добавляем в single.php.

Для корректной работы кнопки «Мне нравится», необходимо добавить div элемент в footer.php (перед вызовом jQuery(document).load):

<div id="vk_api_transport"></div>

Код загрузки кнопки в footer.php:

 jQuery.getScript(
      '//vk.com/js/api/openapi.js?115',
      function() {
        VK.init({apiId: 3904727, onlyWidgets: true});
        VK.Widgets.Like("vk_like_example", {type: "button", height: 20});
    });

Как вы могли заметить — все данные я взял из предоставленного кода практически без изменений. Все, теперь можно настроить размер кнопки и его отступы в вашем стиле.

Facebook

Получаем код виджета тут:

<div id="fb-root"></div>
<script>(function(d, s, id) {
  var js, fjs = d.getElementsByTagName(s)[0];
  if (d.getElementById(id)) return;
  js = d.createElement(s); js.id = id;
  js.src = "//connect.facebook.net/ru_RU/sdk.js#xfbml=1&appId=545514278883012&version=v2.0";
  fjs.parentNode.insertBefore(js, fjs);
}(document, 'script', 'facebook-jssdk'));</script>

И вот такой div:

<div class="fb-like" data-href="https://developers.facebook.com/docs/plugins/" data-layout="button_count" data-action="like" data-show-faces="true" data-share="false"></div>

Добавляем div в single.php:

<div class="fb-like" data-href="https://developers.facebook.com/docs/plugins/" data-layout="button_count" data-action="like" data-show-faces="true" data-share="false"></div>

Затем специальный div в footer.php (перед вызовом jQuery(document).load) для правильной работы кнопки от Facebook:

<div id="fb-root"></div>

После этого смотрим свой appId и добавляем следующий код в footer.php:

    jQuery.ajaxSetup({ cache: true });
 
    window.fbAsyncInit = function() {
      FB.init({
        appId      : '545514278883012',
        status     : true,
        cookie     : true,
        oauth      : true,
        xfbml      : true,
      });      
    };
 
    jQuery.getScript('//connect.facebook.net/ru_RU/all.js');

С этим кодом я промучился больше всего.

Twitter

За кнопкой идем сюда:

<a href="https://twitter.com/share" class="twitter-share-button">Tweet</a>
<script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0],p=/^http:/.test(d.location)?'http':'https';if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src=p+'://platform.twitter.com/widgets.js';fjs.parentNode.insertBefore(js,fjs);}}(document, 'script', 'twitter-wjs');</script>

Забираем отсюда к себе в single.php:

<a href="https://twitter.com/share" class="twitter-share-button">Tweet</a>

И в footer.php:

jQuery.getScript('//platform.twitter.com/widgets.js');

Самый элементарный код. Один минус — если сайт твиттера недоступен, отображает уродскую ссылку.

Заключение

Все вышеописанные кнопки в single.php:

<div id="like_buttons">
  <div id="vk_like_example"></div>
  <div class="fb-like" data-layout="button_count" data-action="like" data-show-faces="true" data-share="false"></div>
  <div id="tweet">
    <a href="https://twitter.com/share" class="twitter-share-button">Tweet</a>
  </div>
</div>

Загрузка всех плагинов в footer.php:

<?php if(is_single()) { ?>
<div id="fb-root"></div>
<div id="vk_api_transport"></div>
<script type="text/javascript">
jQuery(window).load(function() {
    jQuery.ajaxSetup({ cache: true });
 
    window.fbAsyncInit = function() {
      FB.init({
        appId      : '545514278883012',
        status     : true,
        cookie     : true,
        oauth      : true,
        xfbml      : true,
      });      
    };
 
    jQuery.getScript('//connect.facebook.net/ru_RU/all.js');
    jQuery.getScript('//platform.twitter.com/widgets.js');
 
    jQuery.getScript(
      '//vk.com/js/api/openapi.js',
      function() {
        VK.init({apiId: 3904727, onlyWidgets: true});
        VK.Widgets.Like("vk_like_example", {type: "button", verb: 1, height: 20, width: 165});
    });
 
    window.___gcfg = {lang: 'ru'};
});
</script><?php } ?>

Весь код, приведенный выше добавляет кнопки только в блого-записи. Возможно, вам понадобятся кнопки на всех страницах, для этого нужно исключить проверку is_single() и добавлять HTML-элементы социальных кнопок не только лишь в single.php.

И еще один момент: если вы скопируете код отсюда один в один (без замены appId в Facebook и ВКонтакте), то все лайки будут сыпаться в мою копилку. Мне-то не жалко, но вам от этого никакого толку. (:

P.S. Если вам пригодилась информация из данного поста — пожалуйста, нажмите одну из социальных кнопок ниже.

UPD: Пришел к выводу, что загрузка кода с сайтов социальных сетей неоптимальна. На эту тему мой новый пост: «Добавляем Social Likes на сайт с WordPress».

Настройка защищенного доступа к блогу

Наконец-то разобрался с правильной настройкой протокола HTTPS для блога. Итак, по пунктам:

Доступность протокола HTTPS

Проверяем, что ваш сайт доступен по адресу https://example.com. Если недоступен, тогда эта инструкция вам не подходит.

Поисковые роботы

Создаем файл robots-https.txt в корне сайта с таким содержимым:

User-agent: *
Disallow: /

Добавляем правило в .htaccess (сразу после «RewriteEngine On»):

RewriteCond %{HTTPS} on
RewriteRule ^robots\.txt$ robots-https.txt

Это запретит поисковым роботам индексировать содержимое сайт по https. По адресу https://example.com/robots.txt должно выдаваться содержимое robots-https.txt.

Доступ к админке и странице логина

Добавляем в wp-config.php:

define('FORCE_SSL_ADMIN', true);
define('FORCE_SSL_LOGIN', true);

Это хоть немного убережет вас от кражи паролей с помощью перехвата трафика.

Запрет HTTPS на остальных страницах блога

Добавляем правило в .htaccess (сразу после robots-https):

RewriteCond %{SERVER_PORT} ^443$
RewriteCond %{REQUEST_URI} !^/(wp-admin/|wp-login|wp-includes/)
RewriteRule ^(.*)$ http://%{HTTP_HOST}/$1 [R=301,L]

Это позволит автоматически перекидывать ваших пользователей со страниц вида https://example.com на http://example.com, если они вдруг придут с поисковика на эту страницу. При этом не портится защищенный доступ к админке и странице логина.

Блог Евгения Жирнова