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

В прошлой заметке я рассказывал как добавить Social Likes на сайт с WordPress, с тех пор прошло много времени и появилась новая версия Social Likes под названием Social Likes Next. Отличается от предыдущей тем, что иконки теперь в SVG формате и для работы не требуется загрузка jQuery.

Шаг первый (скачиваем скрипт и файл стилей)

Скачиваем social-likes.min.js, например отсюда или отсюда в папку js вашей темы.

Скачиваем social-likes_flag.css, например отсюда или отсюда в папку css вашей темы.

Шаг второй (подключаем файл стилей и скрипт)

В файле functions.php вашей темы вставляем следующие строки

function b2k_enqueue_js_and_css() {
    wp_register_script(
        'social-likes',
        get_stylesheet_directory_uri() . 'js/social-likes.min.js',
        array(),
        false,
        true);

    wp_enqueue_script('social-likes');

    wp_register_style(
        'social-likes',
        get_stylesheet_directory_uri() . 'css/social-likes_flat.css');

    wp_enqueue_style('social-likes');
}

add_action('wp_enqueue_scripts', 'b2k_enqueue_js_and_css');

Шаг третий (добавляем кнопки в конце каждого поста)

Вставляем данный скрипт в functions.php

function b2k_social_likes($content='') {
    global $post;

    $buttons = array();
    $buttons['vk'] = '<div data-service="vkontakte" title="Поделиться ВКонтакте"></div>';
    $buttons['fb'] = '<div data-service="facebook" title="Поделиться в Facebook"></div>';
    $buttons['twitter'] = '<div data-service="twitter" title="Поделиться в Twitter"></div>';
    $buttons['plusone'] = '<div data-service="plusone" title="Поделиться в Google+"></div>';
    $buttons['ok'] = '<div data-service="odnoklassniki" title="Поделиться в Одноклассниках"></div>';
    $buttons['telegram'] = '<div data-service="telegram" title="Поделиться в Telegram"></div>';
    $buttons['linkedin'] = '<div data-service="linkedin" title="Поделиться в LinkeIn"></div>';
    $buttons = implode('', $buttons);

    $tags = array();
    $tags['class'] = 'class="social-likes"';
    $tags['data-title'] = 'data-title="' . $post->post_title . '"';
    $tags['data-url'] = 'data-url="' . get_permalink($post->ID) . '"';
    $tags = implode(' ', $tags);

    $main = '<div ' . $tags . '>';
    $main .= $buttons;
    $main .= '</div>';

    $content .= $main;

    return $content;
}
add_filter('the_content', 'b2k_social_likes');

Шаг четвертый (добавляем отслеживание Google Analytics)

jQuery(window).load(function() {
    jQuery('.social-likes__icon').css('pointer-events', 'none');
    jQuery('.social-likes__widget').click(function(e) {
        var service = jQuery(e.target).attr('data-service');
        var parent = jQuery(e.target).parent();
        var url = parent.attr('data-url');
        var title = parent.attr('data-title');
        gtag('event', 'share', {
            'service' : service,
            'location' : url,
            'title' : title
        });
    });
});

Если вам интересна данная заметка, жмите любую кнопку снизу страницы, ставьте лайк, меня зовут Евгений, пока!

Добавляем 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».

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