Установить Disqus в WordPress

Для установки Disqus в WordPress можно использовать официальный плагин Disqus Comment System. И хотя это самый простой вариант, он подходит не для всех сайтов. Для некоторых шаблонов WordPress этот плагин работает некорректно. В результате, после установки Disqus в WordPress, блок комментариев ломает дизайн.

Поэтому, вместо использования плагина, гораздо удобнее добавить код Disqus непосредственно в файл темы WordPress. Предварительно удалите из вашего шаблона WordPress весь код, который отвечает за вывод встроенных комментариев WordPress. Затем добавьте в файл functions.php код функции ниже:

function disqus_embed() {
global $post;
$disqus_shortname = 'DISQUS_NAME';
echo '<div id="disqus_thread"></div>
<script>
var disqus_config = function () {
this.page.url = "'.get_permalink($post->ID).'";
this.page.identifier = "'.$disqus_shortname.'-'.$post->ID.'";
};
(function() {
var d = document, s = d.createElement("script");

s.src = "//'.$disqus_shortname.'.disqus.com/embed.js";

s.setAttribute("data-timestamp", +new Date());
(d.head || d.body).appendChild(s);
})();
</script>
<noscript>Please enable JavaScript to view the <a href="http://disqus.com/?ref_noscript">comments powered by Disqus.</a></noscript>';
}

Замените DISQUS_NAME на ваш идентификатор в Disqus. Для вывода блока комментариев, необходимо добавить в файл comments.php:

<?php if (comments_open()) : ?>
<?php disqus_embed(); ?>
<?php endif;?>

Изменить шрифт в WordPress

В данной записи рассмотрим как изменить шрифт в WordPress на примере стандартной темы Twenty Fifteen. По умолчанию тема использует веб-шрифты Google Fonts. Прежде чем изменять шрифт, необходимо предварительно подключить свой набор шрифтов.

Для этого идем на сайт Google Fonts и получаем ссылку на коллекцию шрифтов. Затем чтобы изменить шрифт в WordPress, открываем файл шаблона functions.php и добавляем в него следующие строки:

function load_fonts() {
    // Отключаем стандартные шрифты
    wp_dequeue_style( 'twentyfifteen-fonts' );
    // Подключаем свой набор шрифтов
    wp_enqueue_style( 'google-fonts', 'https://fonts.googleapis.com/css?family=PT+Sans:400,700|Roboto+Mono:400,700&subset=latin,cyrillic');
}
add_action('wp_print_styles', 'load_fonts');

С помощью кода выше сначала мы отменили загрузку стандартных шрифтов, а затем добавили в очередь свой собственный свой набор шрифтов.

Во второй строке вам необходимо изменить id twentyfifteen-fonts на свое значение. Его достаточно просто определить, просто найдите соответствующий параметр в исходнике страницы. Для стандартной темы он выглядит следующим образом:

<link rel='stylesheet' id='twentyfifteen-fonts-css'  href='https://fonts.googleapis.com/css?family=Noto+Sans:400,700,400italic,700italic|Noto+Serif:400,700,400italic,700italic|Inconsolata:400,700&subset=latin,cyrillic' type='text/css' media='all' />

Теперь, для того чтобы изменить шрифты в WordPress, измените названия шрифтов в файле style.css вашей темы.

Переключить тему с помощью кода в WordPress

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

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

<?php
/* 
Plugin Name: Theme Switcher
Plugin URI: http://codebeer.ru
Description: Different WordPress theme, depending of the current user
Author: SK
Version: 0.1.0
Author URI: http://codebeer.ru
*/

$theme_name = 'Code.Beer';
$theme_list = array();

add_action('plugins_loaded', 'start', 1);

function start() {
    if ( current_user_can('manage_options') ) {
        $GLOBALS["theme_list"] = get_theme_list();
        add_filter('stylesheet', 'load_style');
        add_filter('template', 'load_theme');
    }
}

function load_style() {
    foreach ($GLOBALS["theme_list"] as $theme) {
        if ($theme['Name'] == $GLOBALS["theme_name"]) {
            return $theme['Stylesheet'];
	}
    }	
}

function load_theme() {
    foreach ($GLOBALS["theme_list"] as $theme) {
        if ($theme['Name'] == $GLOBALS["theme_name"]) {
            return $theme['Template'];
        }
    }
}

function get_theme_list() {
    $wp_themes = array();

    foreach (wp_get_themes() as $theme) {
        $name = $theme->get('Name');
        if ( isset( $wp_themes[ $name ] ) )
            $wp_themes[ $name . '/' . $theme->get_stylesheet() ] = $theme;
        else
            $wp_themes[ $name ] = $theme;
	}

        return $wp_themes;
}

Дочерняя тема WordPress

Дочерняя тема WordPress служит своего рода надстройкой, используемой для изменения и дополнения функционала родительской темы. Главное преимущество дочерней темы — возможность безопасного обновления родительской темы без риска при этом потерять ранее внесенные изменения. В этой статье я расскажу как создать простую дочернюю тему.

Создать дочернюю тему в WordPress очень просто. Самая простая дочерняя тема состоит всего из одного файла. Для этого в themes создайте каталог дочерней темы и положите в него файл style.css следующего содержания:

/*
Theme Name:     Дочерняя тема WordPress
Theme URI:      http://codebeer.ru/
Description:    Описание для дочерней темы
Author:         Code.Beer
Author URI:     http://codebeer.ru/
Template:       twentyfifteen
Version:        0.1.0
*/

Краткое описание каждой строки:

  • Theme Name — название дочерней темы.
  • Theme URI — адрес сайта дочерней темы.
  • Description — описание дочерней темы.
  • Author URI — адрес сайта автора дочерней темы.
  • Author — имя автора дочерней темы.
  • Template — название папки родительской темы.
  • Version — версия дочерней темы.

Файл стилей родительской темы полостью заменяет стили родительской темы. Если вы планируете использовать стили родительской темы, используя директиву @import, выполните импорт стилей родительской темы.

/*
Theme Name:     Дочерняя тема WordPress
Theme URI:      http://codebeer.ru/
Description:    Описание для дочерней темы
Author:         Code.Beer
Author URI:     http://codebeer.ru/
Template:       twentyfifteen
Version:        0.1.0
*/

/* Импорт стилей родительской темы */
@import url("../twentyfifteen/style.css");

/* Далее идут стили дочерней темы */
#site-title a {
    color: #009900;
}

Файлы шаблона дочерней темы

В дочерней теме мы можем добавить новый или заменить любой из имеющихся компонентов в родительском шаблоне, для этого просто создайте файл с таким же именем в каталоге дочерней темы.

В отличии от других компонентов темы, файл functions.php дочерней темы дополняет функции, описанные в родительской теме. Дочерняя тема может переопределить функцию PHP родительской темы, для этого просто объявите ее снова.

Если для использования функции require_once, вам нужно указать расположение файлов, которые находятся внутри папки дочерней темы, используйте get_stylesheet_directory():

require_once( get_stylesheet_directory(). '/my_included_file.php' );

Добавить NoFollow для ссылок в WordPress

В отличии от тега target=_"blank", который открывает ссылку в новом окне, редактор WordPress не имеет встроенной возможности для вставки тега rel="nofollow". Как вариант можно вручную редактировать HTML-код, но это не удобно при частом добавлении ссылок.

Чтобы добавить тег nofollow автоматически для всех внешних ссылок в WordPress, можно использовать специальную функцию. Для этого скопируйте код ниже в содержимое файла functions.php вашей темы.

function add_nofollow_content($content) {
    $content = preg_replace_callback(
    '/<a[^>]*href=["|\']([^"|\']*)["|\'][^>]*>([^<]*)<\/a>/i',
    function($m) {
        if (strpos($m[1], get_bloginfo('url')) === false)
            return '<a href="'.$m[1].'" rel="nofollow" target="_blank">'.$m[2].'</a>';
        else
            return '<a href="'.$m[1].'" target="_blank">'.$m[2].'</a>';
    },
    $content);
    return $content;
}
add_filter('the_content', 'add_nofollow_content');

Если вы хотите управлять индексированием ваших ссылок самостоятельно, можно добавлять тег nofollow в процессе написания поста. C помощью специально плагина, мы сможем легко добавить тег nofollow для любой ссылки в визуальном редакторе WordPress.

Для этого вам необходимо установить плагин Title and Nofollow For Links. Плагин очень простой и не требует дополнительных настроек. Затем в режиме редактирования записи щелкните на кнопке «Вставитьизменить ссылку», чуть ниже пункта Открыть ссылку в новом окне вы увидите новую опцию Добавить атрибут rel="nofollow".

Используем Redis для кэширования WordPress

Использование Redis для хранения кэша страниц WordPress является хорошей альтернативной использованию fastcgi_cache в Nginx. Для работы кэша нам необходимо установить Redis сервер и немного изменить настройки хоста в Nginx. За выполнения функции кэширования будет отвечать специальный PHP-скрипт.

Для работы скрипта необходимо наличие на сервере установленного PHP-модуля PhpRedis. Модуль можно собрать из исходников, либо установить в Debian напрямую из deb пакета с помощью команды apt-get. Данный вариант подходит в том случае, если вы используете на вашем сервере PHP5.

На своем сервере я использую PHP7. Несмотря на все мои попытки, собратьPphpRedis для работы в PHP7 мне так и не удалось. Поэтому, в качестве альтернативы для работы с сервером Redis я буду использовать PHP библиотеку Predis. Для тех кто хочет поэкспериментировать, вот ссылка на ветку PhpRedis для PHP7.

Скачать скрипт кеширования можно c репозитория на сайте GitHub. Необходимо скопировать все файлы в корневую директорию сайта. Для работы кешировани необходимо в конфигурацию виртуальнго хоста Nginx добавить следующие строки:

server {
    listen 80;

    server_name localhost;
    root /usr/share/nginx/html;
   
    index index.php;

    location /index.php {
        alias /www/codebeer.ru/wordpress/wp-cache.php;
    }

    location / {
        index wp-cache.php;
        try_files $uri $uri/ /wp-cache.php?$args;
    }

    location /wp-admin/ {
        index index.php;
        try_files $uri $uri/ /index.php$args;
    }

    rewrite /wp-admin$ $scheme::/$host$uri/ permanent;

    location ~ .php$ {
        try_files $uri = 404;
        fastcgi_pass unix:/var/run/php5-fpm.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }
}

Защита WordPress в Nginx

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

Используя стандартные архитектурные особенности движка WordPrees и популярных плагинов, злоумышленники путем специально сформированного запроса могут получить информацию о версии используемой СMS и используемых плагинов. Для того чтобы на основе этой информации использовать известные уязвимости в плагинах или устаревшей версии WordPress.

Наша задача напротив состоит в том, что бы максимально усложнить процедуру сбора информации о сайте WordPress, а также максимально ограничить HTTP-запросы к служебным файлам и директориям WordPress. Для того чтобы защитить WordPress от любопытных глаз, мы будем использовать стандартные возможности Nginx, путем добавления правил в секцию server нашего блога.

Защита WordPress в Nginx

Не стоит беспечно наедятся на качество кода WordPress и быстрый выпуск заплаток, которые устранят известные уязвимости движка. Что бы защитить WordPress от потенциальных методов взлома, нужно закрыть доступ к следующим служебным файлам и директориям WordPress:

  • Каталог wp-includes. Содержит в себе все основные и необходимые файлы для работы фронтэнда WordPress. Папка содержит файлы PHP, CSS и JavaScript, которые обеспечивают основные функции WordPress.
  • Каталоги uploads, themes и plugins, которые находятся в папке wp-content. Папки используются для загрузки изображений, шаблонов и плагинов WordPress.

Запретить доступ к php-файлам в wp-includes

Чтобы запретить доступ к php-файлам wp-includes, необходимо использовать следующие правила в настройках Nginx:

location ~* /wp-includes/.*.php$ {
	deny all;
	access_log off;
	log_not_found off;
}

Этот каталог всегда расположен в корне WordPress, изменять название или расположение не рекомендуется.

Запретить доступ к php-файлам в wp-content

Чтобы запретить доступ к php-файлам wp-content, необходимо использовать следующие правила в настройках Nginx:

location ~* /wp-content/.*.php$ {
	deny all;
	access_log off;
	log_not_found off;
}

При желании вы можете изменить расположение каталога wp-content, для этого необходимо использовать параметры WP_CONTENT_DIR и WP_CONTENT_URL в файле wp-config.php

Запретить доступ к php-файлам в папке uploads

Чтобы запретить выполнение php-файлов в каталоге загрузок wp-content, следующие правила в настройках в настройках Nginx:

location ~* /(?:uploads|files)/.*.php$ {
	deny all;
	access_log off;
	log_not_found off;
}

По умолчанию каталог с загружаемыми файлами расположен в wp-content, но при желании может быть изменен в настройка WordPress.

Запретить доступ к php-файлам в папках themes и plugins

Чтобы запретить доступ к php-файлам шаблона и плагинов, необходимо добавить соответствующие правила в настройках Nginx.

Для каталога шаблонов:

location ~* /themes/.*.php$ {
	deny all;
	access_log off;
	log_not_found off;
}

Для каталога плагинов:

location ~* /plugins/.*.php$ {
	deny all;
	access_log off;
	log_not_found off;
}

Каталоги шаблонов и плагинов WordPress расположены в папке wp-content и имеют название themes и plugins соответственно. Вы можете самостоятельно задать расположение папки плагинов, задав параметры WP_PLUGIN_DIR и WP_PLUGIN_URL. Для того чтобы изменить расположение файлов темы, необходимо использовать функцию register_theme_directory().

Запретить доступ к xmlrpc.php

Если вы не используете XML-RPC, можно закрыть все запросы к этому файлу в Nginx:

location = /xmlrpc.php {
	deny all;
	access_log off;
	log_not_found off;
}

Переименовать wp-content в WordPress

Если вы используете на своем сайте WordPress, вам должно быть известно, что все компоненты связанные с шаблоном, плагинами и локализацией, находятся внутри каталога wp-content. Таким образом, на основе запроса к каталогу wp-content, можно сделать вывод о использовании CMS WordPress.

Ни для кого не секрет, что просмотрев содержимое страницы, можно обнаружить множество специфических элементов, которые свойственны для сайтов использующих WordPress. Например, путь к каталогу изображений, который по умолчанию и расположен в папке wp-content/uploads.

При использовании актуальной версии WordPress, информация о используемом движке не представляет для нас опасности. Тем не менее, сайт становится менее похожим на большинство сайтов использующих WordPress. Такая простая мера позволит лучше обезопасить себя от различных сетевых сканеров.

В данном примере мы рассмотрим последовательность действий, которые необходимы чтобы переименовать каталог wp-content на includes. Для этого потребуется найти в файле wp-config.php следующую строку:

require_once(ABSPATH . 'wp-settings.php');

Затем, после этой строки необходимо добавить этот код:

define ( 'WP_CONTENT_FOLDERNAME', 'includes' );
define ( 'WP_CONTENT_DIR', ABSPATH . WP_CONTENT_FOLDERNAME );
define ( 'WP_SITEURL', 'https://' . $_SERVER['HTTP_HOST'] . '/' );
define ( 'WP_CONTENT_URL', WP_SITEURL . WP_CONTENT_FOLDERNAME );

Несмотря на определенные преимущества, у данного метода есть серьезный недостаток. В последствии могут возникнуть проблемы, вызванные низким качеством кода шаблонов или плагинов WordPress. Причина состоит в том, что некоторые разработчики используют в коде фиксированный адрес каталога wp-content.

Если переименовать wp-content, плагин просто перестанет работать, а это значит, что вам придется самостоятельно лезть в код чтобы исправить эти недоработки.

Убрать дату публикации в WordPress

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

В WordPress убрать дату публикации достаточно просто, для этого нам необходимо внести небольшие изменения в тему оформления WordPress. Но давайте сначала разберемся, для чего все это и какое преимущество мы получим от данной манипуляции.

Зачем убирать дату публикации

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

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

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

Если вы заметили, что старые записи со временем стали получать все меньше и меньше переходов из поисковых систем. Возможной причиной может быть дата публикации материала на странице поисковой выдачи.

Если в WordPress убрать дату публикации, можно попытаться таким способом получить большее количество переходов из поисковых систем. Разумеется, это не выведет страницу в топ, но может дать некоторое визуальное преимущество по сравнению с другими сайтами в выдаче.

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

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

Как убрать дату публикации в WordPress

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

Можно периодически вручную либо с помощью скрипта, который периодически будет обновлять  дату в базе WordPress. Но это будет обман посетителей, а также вызовет путаницу.

Я предлагаю скрыть дату публикации записи от поисковых систем используя функции CSS или JavaScript, которые поддерживают все современные браузеры.

Код вывода даты публикации записи отличается в зависимости от используемой темы оформления WordPress. Например, за вывод даты в WordPress Twenty Fifteen отвечает переменная $time_string, которая находится файле template-tags.php

Поэтому, если вы не нашли указанный ниже код в вашем шаблоне WordPress, попытайтесь найти необходимую строку с помощью поиска по названию стилей, которые отвечают за форматирование вывода даты в записях WordPress.

Убрать дату публикации с помощью CSS

Чтобы в WordPress убрать дату публикации, придется внести изменения в шаблон сайта WordPress. Найдите строку, которая отвечает за вывод даты публикации материала. Поместите код отвечающий за вывод даты внутрь тега span:

<span date="<?php //код вывода даты ?>"></span>

При необходимости, нужно повторить указанные действия для всех файлов шаблона WordPress. Чтобы дата публикации записи была видна посетителям, добавьте в файл style.css следующую строку:

[date]:before { content: attr(date); }

Убрать дату публикации с помощью JavaScript

Чтобы в WordPress убрать дату публикации, можно использовать функции JavaScript. По аналогии, необходимо изменить код, как это сделано в примере ниже:

<script language="javascript" type="text/javascript">document.write("<?php //код вывода даты ?>");</script>

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

Проверить результат можно с помощью в панели Search Console. Для этого разделе «Сканирование», необходимо выбрать пункт меню «Просмотреть как Googlebot».

Кавычки в WordPress

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

В случае кавычек, автоматическая замена символов может не верно срабатывать. В результате возникает ситуация, когда кавычки в WordPress отображаются повернутыми в одну сторону.

За автоматическую замену символов в WordPress отвечает встроенная функция wptexturize(). Функция автоматически заменяет символы в записях и комментариях, чтобы текст был более читаемым и привлекательным. К сожалению, в нашем случае это не работает.

Отключить замену кавычек в WordPress

Чтобы отключить замену кавычек в WordPress, необходимо использовать функцию remove_filter(). Для этого добавьте в конец файла functions.php следующие строки:

// Для записей и страниц
remove_filter('the_content', 'wptexturize');

// Для заголовков записей и страниц
remove_filter('the_title', 'wptexturize');

// Для анонсов
remove_filter('the_excerpt', 'wptexturize');

// В комментариев
remove_filter('comment_text', 'wptexturize');

С помощью кода выше, мы полностью отключаем функцию wptexturize(), которая отвечает за автоматическую замену символов в WordPress.