Список постов в категории "Хобби > Администрирование"

Добавляем Social Likes на сайт с WordPress

В этой заметке я расскажу — как поставить себе на сайт скрипт Social Likes, который отображает кнопки социальных сетей.

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

Основная причина тормозов во время загрузки поста была в опросе всех социальных сетей, кнопки которых у меня были добавлены на сайте. Способ добавления кнопок был описан мною ранее в статье «Добавляем кнопки «Мне нравится» от Facebook, ВКонтакте, Twitter и Google+».

Если вы хотите добавить кнопки социальных сетей на сайт — выбор огромен! Это может быть кнопка «Поделиться» от компании Яндекс, блок кнопок ShareThis — тысячи их.

Во всех этих решениях есть один фатальный недостаток — они зависят от сторонних сайтов. Если сайт, который предоставляет кнопку, ляжет, то вместе с ним накроется и ваш блог (как минимум — будут тормоза при открытии страниц).

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

Поехали!

Настраиваем внешний вид кнопок в конструкторе Social Likes:

Конструктор Social Likes

Для эстетов есть вариант конструктора на английском.

Затем скачиваем архив со скриптом и нужным вам файлом стилей. В архиве уже есть готовый index.html с примером, так что, если вам все понятно, можете дальше не читать.

Загружаем social-likes.min.js и файл стилей в папочку с темой и добавляем в functions.php вашей темы вот такой код:

function enqueue_social_likes() {
    $uri = get_stylesheet_directory_uri();

    // Регистрируем скрипт и указываем, что он зависит от jQuery
    wp_register_script('social-likes', $uri . '/social-likes.min.js', array('jquery'));
    // Регистрируем файл стилей
    wp_register_style('social-likes', $uri . '/social-likes_birman.css');

    // Если это страница с постом
    if (is_singular()) {
        // Вставляем скрипт в код страницы
        wp_enqueue_script("social-likes");
        // Вставляем файл стилей в код страницы
        wp_enqueue_style("social-likes");
    }
}
// Добавим вызов нашей функции во время инициализации скриптов
add_action('wp_enqueue_scripts', 'enqueue_social_likes');

Затем в single.php вашей темы добавляем вот такой блок:

<div class="social-likes">
    <div class="facebook" title="Поделиться ссылкой на Фейсбуке">Facebook</div>
    <div class="twitter" data-via="koryakokot" title="Поделиться ссылкой в Твиттере">Twitter</div>
    <div class="vkontakte" title="Поделиться ссылкой во Вконтакте">Вконтакте</div>
    <div class="plusone" title="Поделиться ссылкой в Гугл-плюсе">Google+</div>
</div>

После всех этих манипуляций вам наверняка захочется узнать — насколько часто посетители сайта кликают по этим кнопкам. К счастью Social Likes поддерживает событие popup_opened.social-likes, которое вызывается каждый раз, когда открывается окно «Поделиться». Добавляем вот такой код в footer.php вашей темы (сразу после вызова wp_footer()):

<script type="text/javascript">
jQuery('.social-likes').on('popup_opened.social-likes', function(event, service, win) {
    ga('send', 'social', service, 'share', location.href);
});
</script>

После этого заходим в Google Analytics смотрим «Источники траффика->Соцфункции->Плагины».

Если вам понравилась данная заметка, теперь вы можете поделиться ею в социальных сетях.

Добавляем кнопки «Мне нравится» от 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, если они вдруг придут с поисковика на эту страницу. При этом не портится защищенный доступ к админке и странице логина.

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

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

Akismet

Классика защиты от спама в комментариях. Проверяет новые комментарии по своей базе и отсеивает всякий мусор. Категорически рекомендуется к установке. Для затравки цитата из моей админки: «Akismet защитил ваш сайт от 3 522 спам-комментариев».

Executable PHP widget

Позволяет добавлять виджеты в тему с исполняемым PHP кодом. Установил специально для YoWindow.

Google Analytics for WordPress

Поддержка службы «Google Analytics». Благодаря ему можно смотреть подробную статистику посещений блога.

Google XML Sitemaps

Генерация файлика sitemap.xml, включая запакованную версию. Этот файл идет в нагрузку к robots.txt и используется поисковиками для более подробной индексации сайта. Рекомендую!

LiveJournal Crossposter

Автоматически создает копию поста в моем блоге в ЖЖ. В последнее время почему-то глючит и создает дубли при кросспостинге. Кандидат на удаление.

Mail From

Задает имя для робота, который шлет отчеты на почту. Согласитесь, что noreply@blog2k.ru намного лучше какого-нибудь ip141.32.31@blog2k.ru. Чисто декоративный плагин.

Pagination Rel Links

Задает значения аттрибута rel — «next|prev» для лучшего индексирования страниц. Подробности можно узнать в этой статье на хабре.

StatPress Reloaded

Статистика посещений моего блога в дополнение к службам «Google Analytics» и «Яндекс.Метрика». Чисто позырить — кто ходит по блогу и зачем.

Use Google Libraries

Загрузка стандартных библиотек (типа jQuery) с хостинга Google. Теоретически из-за этого блог грузится быстрее, потому что загрузка скриптов происходит с разных IP адресов. Честно говоря, не проверял. Поверил на слово.

WordPress Popular Posts

Список популярных постов, который вы видите справа. Можно выводить список популярных постов за сутки, неделю, месяц или за все время наблюдения. В плагине StatPress Reloaded есть похожий функционал, но он как-то совсем криво работает и сделан, видимо, для галочки.

WP-Syntax

Подсветка синтаксиса исходников. Поддержка C/C++/Python/Java/sh и еще куча других. Его работу можно увидеть воочию в разделе «Программирование».

WP LaTeX

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

WP Super Cache

Кеширует страницы блога, избавляя сервер от лишней работы по разбору PHP скриптов. Реально ускоряет блог.

WP Ya.Share

Добавляет кнопку «Поделиться» от «Яндекса» для множества социальных сетей к каждому посту.

Яндекс.Метрика

Интеграция сервиса «Яндекс.Метрика». Учитывая, что «Яндекс.Метрика» «залипает» во время загрузки графиков — кандидат на удаление.

UPD: написал обновленную версию этого поста, часть вторую. Ознакомится можно по ссылке: «Какие я использую плагины для WordPress — 2».

Наконец-то исправил страницу 404

Ура! Наконец-то добавил нормальную страницу с ошибкой 404. Эта страница отображается пользователю, если он пришел в блог на адрес, которого нет.

Для того, чтобы страница корректно отображалась в IE8 пришлось увеличить ее размер до 512 байт. Я добавил блок данных в конец страницы.

Данный блок можно создать с помощью скрипта на питоне (random() используется для того, чтобы gzip при отдаче страницы не смог ее сильно сжать):

from random import random
print ''.join(chr(int(ord('A') + 26 * random())) for i in xrange(512))
Личный блог Евгения Жирнова