Изменяем title страниц в WordPress

В WordPress по умолчанию для каждой страницы в содержимое тега title дописывается название сайта. С точки зрения SEO это не всегда правильно. Изменить формат тега title можно при помощи различный SEO плагинов. Для простых случаев можно обойтись редактированием файла functions.php, добавив в него следующий код:

function theme_name_wp_title( $title, $sep ) {
	global $page, $paged;

	if ( is_home() || is_front_page() ) {
		$title = get_bloginfo( 'name', 'display' ) . ' - ' . get_bloginfo( 'description', 'display' );
	}
	if ( is_page() ) {
		$title = get_the_title();
	}
	if ( is_single() ) {
		$title = get_the_title();
	}
	if ( is_category() ) {
		$title = single_cat_title( 'Рубрика: ', false );
	}
	if ( is_archive() && !is_category()) {
		$title = 'Месяц: ' . get_the_date( _x( 'F Y', 'monthly archives date format', 'twentyten' ) );
	}
	if ( is_search() ) {
		$title = 'Результаты поиска: ' . get_search_query();
	}
	if ( is_tag() ) {
		$title = single_tag_title('Метка: ', false);
	}
	if ( ( $paged >= 2 || $page >= 2 ) && ! is_404() ) {
		$title .= '. Страница ' . $paged . '.';
	}
	return $title;
}
add_filter( 'pre_get_document_title', 'theme_name_wp_title', 10, 2 );

Начиная с WordPress 4.4 функция wp_title() упразднена, вместо нее необходимо использовать pre_get_document_title.

Использование веб-шрифтов внутри CSS

Дата: 10.08.2015Метки:

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

Основная мысль статьи заключается в том, что за счет хранения шрифтов в CSS файле мы можем ускорить загрузку сайта и уменьшить количество запросов к серверу. С технической стороны метод выглядит следующим образом. Используя Base64-представление, мы переводим бинарные данные шрифта в ASCII-текст, после чего записываем его в CSS-файл.

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

Шрифты WOFF на текущий момент являются наиболее предпочтительными для использования. Если верить статистике сaniuse.com, этот формат поддерживают более 88% используемых браузеров в мире.

В качестве источника шрифтов лучше всего использовать Goole Fonts. Просто загружаем WOFF-файлы по ссылкам из CSS. По умолчанию в Chrome загружаются шрифты в формате WOFF2, поэтому для загрузки WOFF необходимо использовать браузер Internet Explorer.

Как запасной вариант — можно выполнить конвертирование из формата TTF в WOFF. Для этих целей в интернете есть множество онлайн-сервисов. Следует отметить, что после такой конвертации отрисовка шрифта может незначительно отличаться.

В целом я могу порекомендовать для этих целей Webfont Generator. Кроме функции конвертирования, он еще умеет оптимизировать шрифты и отдавать их в закодированном Base64 виде.

Еще можно использовать ttf to woff converter. Что бы перевести шрифты в Base64-представление используем утилиту Base64 Encode/Decode:

b64 -e input.woff output.txt

Поле того чего копируем шрифты в CSS:

@font-face {
 font-family: 'Noto Sans';
 font-style: normal;
 font-weight: 400;
 src: url(data:application/font-woff;charset=utf-8;base64,
d09GRgABAAAAAGfQABEAAAAAoxQAAQABAAAAAAAAAAAAAAAAAAAAAAAAAABHREVGAAABgAAA
AEQAAABeBXMEg0dQT1MAAAHEAAAF4wAADKz1RCPkR1NVQgAAB6gAAAAMAAAADAAVAApPUy8y
AAAHtAAAAGAAAABgd9GZHGNtYXAAAAgUAAABFQAAAYz5wR+KY3Z0IAAACSwAAACWAAAA/hmv
GsVmcGdtAAAJxAAABHkAAAe0NgsWDGdhc3AAAA5AAAAAEAAAABAAFgAjZ2x5ZgAADlAAAFDx
...
) format('woff');
}

Файл со шрифтами подключают как обычные CSS или загружают специальным скриптом:

Установка сертификатов StartSSL

Дата: 05.08.2015Метки:

Данная статья предполагает, что мы уже успешно прошли процедуру регистрации на сайте StartSSL и в нашем распоряжении есть следующие файлы: сертификат ssl.crt с проверкой домена и приватный ключ ssl.key. Копируем эти два файла на сервер. Приватный ключ перед использованием необходимо расшифровать командой:

openssl rsa -in ssl.key -out private.key

На этом этапе необходимо будет ввести пароль, который мы указывали в процессе заказа сертификата на сайте StartSSL.

Для безопасности установим права доступа на private.key:

# Только владелец может читать файл
chmod 400 /etc/nginx/ssl/*

Скачиваем сертификат Class 1 Intermediate Server CA:

wget http://www.startssl.com/certs/sub.class1.server.ca.pem

Объединяем сертификаты в один файл:

cat ssl.crt sub.class1.server.ca.pem > domain.pem

Минимальная конфигурацию NGINX для проверки работы SSL:

server {
    listen       443 ssl;
    server_name  domain.net;

    ssl_certificate      /etc/nginx/ssl/domain_com/domain.pem;
    ssl_certificate_key  /etc/nginx/ssl/domain_com/domain.key;

    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
    }
}

После изменения настроек необходимо перезапустить NGINX:

service nginx restart

Для проверки правильности установки сертификатов используем сервис Symantec SSL Toolbox.

Подключение к OneDrive по протоколу WebDav

Последовательность действий аналогична подключению обычной сетевой папки, за исключением одной особенности — необходимо знать свой CID. Для этого в веб-интерфейсе OneDrive заходим в любой каталог, в адресной строке браузера вы увидите параметр cid=XXXXXXXXXXXXXXX.

Адрес подключения к хранилищу OneDrive по протоколу WebDAV выглядит следующим образом:

https://d.docs.live.net/XXXXXXXXXXXXXXX

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

Для подключения также можно использовать командную строку:

net use S: https://d.docs.live.net/XXXXXXXXXXXXXXX/ /user:"user@live.com" "password" /persistent:yes

Backup данных на Яндекс Диск в Linux

Простой и одновременно надежный скрипт для создания и дальнейшего хранения бэкапов на Яндекс Диске. В примере ниже скрипт ежедневно в полночь делает дамп базы MySQL и создает архив всех файлов в заданном каталоге. Переменная TIME подобрана таким образом, чтобы бэкап за предыдущий день, кроме последнего числа месяца, затирался свежей резервной копией. При желании можно хранить бэкапы за каждый день, для этого измените формат даты на +%Y-%m-%d.

Создаем файл backup.sh, копируем в него следующие строки:

#!/bin/bash
# Задаем формат даты
TIME=`date +%Y-%b`

FILES=/tmp/www.$TIME.tar.gz
MYSQL=/tmp/mysql.$TIME.sql.gz

# Создаем архив файлов
tar -czf $FS_FILE -P /www

# Создаем архив базы MySQL
mysqldump -u backup --password=password --all-databases --ignore-table=mysql.event | gzip > $MYSQL

# Загружаем данные
curl --user user@yandex.ru:password -T "{$FILES,$MYSQL}" https://webdav.yandex.ru/

# Удаляем файлы
rm $FILES $MYSQL

Создадим пользователя для бэкапа данных MySQL, назначим права для SELECT и Lock Tables:

CREATE USER 'backup'@'localhost' IDENTIFIED BY 'password';
GRANT SELECT, LOCK TABLES ON * . * TO 'backup'@'localhost' IDENTIFIED BY 'password';
FLUSH PRIVILEGES;

Даем скрипту права на запуск:

chmod 0700 backup.sh

Добавим задание в crontab:

crontab -e
# Запускаем скрипт каждый день в полночь
0 0 * * * /home/backup.sh

Backup данных на OneDrive в Linux

В Windows 10 клиент OneDrive установлен в системе по умолчанию и изначально для хранения данных сервис предоставляет 15GB бесплатного пространства. Дополнительно можно получить «вечных» +30GB за счет бонусных программ. В моем случае это были: привлечение новых пользователей, загрузка изображений с камеры и программа лояльности. Как видите, можно получить существенный объем хранилища совсем даром. Так почему бы не использовать это место с пользой? Связи с чем я решил отказаться от использования DropBox и перенести все важные данные в облако OneDrive.

Еще я использовал Яндекс Диск в качестве хранилища бэкапов для Linux сервера. Главное достоинство Яндекс Диска — возможность заливать файлы по протоколу WebDAV просто используя сurl. Что бы все важные данные хранились в одном месте, было принято решение перенести бэкапы в OneDrive.

Для работы с OneDrive в Linux без использования клиента необходимо использовать OneDrive API. Я не горел желанием самостоятельно его ковырять, поэтому был взят уже готовый скрипт скрипт bash-onedrive-upload. Для работы скрипта необходимо указать Client ID и Client secret, для этого в Microsoft account Developer Center необходимо создать новое приложение. В настройках приложения «Edit settings» — «API Settings» обязательно нужно выбрать опцию «Mobile or desktop client app: yes».

Заливаем скрипт bash-onedrive-upload на сервер, bash-json-parser необходимо скачать отдельно и положить в каталог /libs/json/. Даем право на запуск:

chmod 0700 onedrive-authorize onedrive-base onedrive-upload ./libs/json/bash-json-parser

В файле onedrive.cfg необходимо указать полученные Client ID и Client secret:

export refresh_token_file="${script_base_folder}/.refresh_token"

# Authentication config
export api_client_id="Client ID"
export api_client_secret="Client secret"

# Upload config
# Leave empty for root folder
export api_folder_id=""
export max_upload_threads=2

Если оставить параметр export api_folder_id пустым, то по умолчанию файлы будут заливаться в корень OneDrive. При желании можно задать любой вложенный каталог. Для этого из адресной строки веб-интерфейса OneDrive необходимо скопировать id этого каталога.

Запускаем скрипт onedrive-authorize. Скрипт попросит перейти в браузере по указанной ссылке, где вам необходимо разрешить доступ приложению к данным OneDrive. После отверждения откроется пустая страница, из адресной строки которой в окно терминала необходимо скопировать значение параметра code. Если вы все сделали правильно, то увидите в терминале нечто похожее на это:

./onedrive-authorize
Please open the following URL in your browser and follow the steps until you see a blank page:
https://login.live.com/oauth20_authorize.srf?client_id=0000000000000000&scope=wl.skydrive%20wl.skydrive_update%20wl.offline_access&response_type=code&redirect_uri=https://login.live.com/oauth20_desktop.srf

When ready, please enter the value of the code parameter (from the URL of the blank page) and press return
111111111-1111-1111-1111-111111111111
It seems like we have a refresh token, so we are ready to go

После чего можно использовать скрипт для загрузки файлов:

#загрузка файла в коневой каталог
./onedrive-upload file1

#загрузка файла в вложенный каталог
./onedrive-upload -f "path" file1

Скрипт создания бэкапа и загрузки на сервер OneDrive:

BACKUP_FILES="/home/www /etc/nginx"
MYSQL_USER="user"
MYSQL_PASS="password"
TMP_DIR=/tmp/backup
BACKUP_TAR=/tmp/backup.`date +%y.%m.%d`.tar

mkdir -p $TMP_DIR

# Backup files
tar -czf $TMP_DIR/fs.tar.gz -P $BACKUP_FILES

# Backup MySQL
for db in $(mysql -B -s -u $MYSQL_USER --password=$MYSQL_PASS -e 'show databases' | grep -v information_schema)
do
# Exclude database
    if [ $db != "performance_schema" ] && [ $db != "mysql" ]; then
    mysqldump -u $MYSQL_USER --password=$MYSQL_PASS $db | gzip > $TMP_DIR/mysql.$db.sql.gz
    fi
done

# Merge files
tar -cf - -C $TMP_DIR . > $BACKUP_TAR

# OneDrive upload
./onedrive-upload -f "Sites/backup" $BACKUP_TAR

rm -r $TMP_DIR $BACKUP_TAR

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

Переименовываем папку пользователя в Windows 10

Дата: 01.08.2015Метки:

После чистой установки Windows 10, я обнаружил что имя папки пользователя состояло из обрезанного до 5 символов логина учетной записи Microsoft. Как говориться: мелочь, а неприятно.

В редакторе реестра переходим по адресу:

HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindows NTCurrentVersionProfileList

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

Вход в сиcтему будет выполнен под временным профилем. Переименуйте папку пользователя C:UersMyName в соответствие значению ProfileImagePath. Если все сделали правильно, то после следующей перезагрузки, вход в систему будет выполнен под вашим текущим профилем.

Для изменения папки синхронизации OneDrive, необходимо запустить:

"C:UsersMyNameAppDataLocalMicrosoftOneDriveUpdateOneDriveSetup.exe"

Установка Google Chrome в Fedora

Дата: 01.08.2015Метки:

На данном примере я опишу установку Google Chrome в Fedora 25, в случае использования более ранних версий Fedora или RHEL/CentOS, вместо менеджера пакетов dnf необходимо использовать yum. Для поддержания браузера в актуальном состоянии лучший вариант установки Chrome из официального репозитория Google. Добавляем информацию о репозитории:

cat << EOF > /etc/yum.repos.d/google-chrome.repo
[google-chrome]
name=google-chrome - \$basearch
baseurl=http://dl.google.com/linux/chrome/rpm/stable/\$basearch
enabled=1
gpgcheck=1
gpgkey=https://dl-ssl.google.com/linux/linux_signing_key.pub
EOF

Для установки Google Chrome используем одну из следующих команд:

#Установка стабильной версии
dnf install google-chrome-stable

#Установка бета-версии
google-chrome-beta

#Установка dev-версии
dnf install google-chrome-unstable

Автоматическое монтирование дисков в Linux

Дата: 31.07.2015Метки:

Для начала необходимо узнать UUID монтируемого устройства. Для этого выполним команду:

blkid /dev/sdb1
/dev/sdb1: UUID="34e63ef2-fdf3-4330-8544-a5c732df779e" TYPE="ext4" PARTUUID="4ec77176-01"

Что бы диск автоматически монтировался при запуске системы необходимо добавить в fstab:

nano /etc/fstab
UUID=34e63ef2-fdf3-4330-8544-a5c732df779e /media/Storage	ext4	defaults	0 0

В случае монтирования ntfs разделов, необходимо указать тип файловой системы ntfs-3g.

Для того чтобы монтируемый диск отображался в сайдбаре nautilus, точка монтирования должна находится в каталоге /media, как это сделано в моем примере выше.

Загрузочная флешка с Fedora

Дата: 31.07.2015Метки:

Для начала определим имя присвоенное системой для нашей флешки. В терминале с правами root выполним следующую команду:

$ lsblk
NAME            MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda               8:0    0 465.8G  0 disk 
├─sda1            8:1    0   500M  0 part /boot
└─sda2            8:2    0 465.3G  0 part 
  ├─fedora-swap 253:0    0   3.9G  0 lvm  [SWAP]
  ├─fedora-root 253:1    0    50G  0 lvm  /
  └─fedora-home 253:2    0 411.4G  0 lvm  /home
sdb               8:16   0 931.5G  0 disk 
└─sdb1            8:17   0 931.5G  0 part 
sdc               8:32   1     7G  0 disk 
├─sdc1            8:33   1   447M  0 part 
├─sdc2            8:34   1   6.2M  0 part 
└─sdc3            8:35   1  24.7M  0 part 
sr0              11:0    1  1024M  0 rom

Как видно из результата: имя устройства sdc, диск разбит на 3 логических раздела. Удаляем все существующие разделы:

fdisk /dev/sdX

Welcome to fdisk (util-linux 2.26.2).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.


Command (m for help): d
Partition number (1-3, default 3): 1

Partition 1 has been deleted.

Command (m for help): d
Partition number (2,3, default 3): 2

Partition 2 has been deleted.

Command (m for help): d
Selected partition 3
Partition 3 has been deleted.

Command (m for help): w
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.

Записываем образ Fedora на диск:

dd if=/home/user/fedora.iso of=/dev/sdХ bs=8M
55+1 records in
55+1 records out
468713472 bytes (469 MB) copied, 76.9137 s, 6.1 MB/s