WordPress

Начнем с главного, а это значит с хостинга, так вот WordPress.org официально рекомендует только три хостинга провайдера, это DreamHost, BlueHost и SiteGround. Мое личное мнение, если выбирать из этих трех, то это DreamHost, а так достаточно много прекрасных альтернатив от Zomro (Зомро) и СХОСТ (S-Host) до Perfect Quality Hosting (PQ)

Скачать последнюю версию Wordpress:

Все о WordPress

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

Установка Wordpress на Debian, Ubuntu

Инсталляция на Debian, Ubuntu

  • Установка недостающих зависимостей (у вас они уже могут быть установлены).
    apt install mysql-server phpmyadmin
    apt install libjs-cropper libjs-prototype libjs-scriptaculous \
     libphp-phpmailer libjs-jquery libphp-snoopy php-gettext 
  • Инсталляция:
    mkdir wordpress
    cd wordpress/
    wget -c https://wordpress.org/latest.zip
    unzip latest.zip
    cp wp-config-sample.php wp-config.php
  • Создаем в Движок БД MySQL БД для нашего сайта и пользователя от которого будет работать CMS что это? Назначение популярных CMS WordPress, например при помощи Универсальная установка phpMyAdmin в любой Linux, BSD. Полученными данными заполняем файл wp-config.php.
    mysql> CREATE DATABASE databasename;
    Query OK, 1 ROW affected (0.00 sec)
     
    mysql> GRANT ALL PRIVILEGES ON databasename.* TO "wordpressusername"@"localhost"
        -> IDENTIFIED BY "password";
    Query OK, 0 ROWS affected (0.00 sec)
     
    mysql> FLUSH PRIVILEGES;
CREATE DATABASE databasename;
GRANT ALL PRIVILEGES ON databasename.* TO "wordpressusername"@"localhost" IDENTIFIED BY "password";
FLUSH PRIVILEGES;
  • Обязательно заполните уникальные ключи и соли для аутентификации в файле wp-config.php. Для этого как указано в самом файле wp-config.php удобно использовать генератор ключей для Wordpress.
    # chown -R www-data:www-data /var/www/example.com
    # chmod 600 wp-config.php
  • Заходим при помощи браузера на ваш сайт http://www.example.com/wp-admin/install.php и заполняем название сайта и пользователя с правами суперпользователя. Можно не ставить галочку напротив пункта "Разрешить поисковым системам индексировать сайт.", в дальнейшем это можно изменить в административной панели.
  • Настраиваем ЧПУ без добавления html к названию страницы, то есть
    /%category%/%postname%

Wordpress. Права доступа в файлам и директориям

Безопасные атрибуты для файлов и папок Wordpress, используя утилиту Примеры использования команды chmod в Linux: 755 на папки; 644 на файлы; 600 на wp-config.php. Для установки компонентов нужно разрешить Apache писать и удалять в директории wp-content.

find public_www/wp-content -type d -exec chmod 770 {} \;
find public_www/wp-content -type f -exec chmod 660 {} \;

WordPress - настройка ЧПУ

WordPress - настройка ЧПУ (Человеку Понятный Урл(Что такое ссылка URL)).

Прежде всего перед настройкой ЧПУ в Apache включите Как включить mod_rewrite?.

Настройку ЧПУ нужно выполнять сразу после установки wordpress, иначе позже дополнительно придётся настраивать перенаправление на уже проиндексированные страницы, c некрасивым URL. В административной части переходим в Параметры→Постоянные ссылки и мы можем там выбрать из нескольких предустановленных вариантов ЧПУ или в разделе "Произвольно" создать свой новый. Например:

/%category%/%postname%.html

или если вы хотите, чтобы адреса постов были без указания на категорию, тогда укажите:

/%postname%/

Рекомендуется указывать категорию и не ставить слеш в конце:

/%category%/%postname%
Символы .html (или .htm) в конце можно как указывать, так и не указывать — это больше дело личных предпочтений.

Эти действия приводят к созданию файла .htaccess в корне вашего сайта (в начальной поставке Wordpress такого файла нет).

Нужно установить плагин для того, чтобы адреса с кириллицы переводились на латиницу (а лучше изначально адреса задавать в латинице), например: RusToLat, Cyr-To-Lat, на 2017 год хорошо работает плагин Cyr to Lat enhanced.

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

Ниже приводится код с работающего сервера, в нем настроена

  1. Переадресация 301 редирект: с WWW
  2. Последние строки решают проблему дублей слешей, вида https://example.com////test
RewriteEngine On
Options +FollowSymLinks
 
RewriteCond %{HTTPS} !=on
RewriteCond %{HTTP_HOST} ^www.example\.com$ [NC]
RewriteRule ^(.*)$ https://example.com/$1 [R=301,L]
 
RewriteCond %{HTTPS} !=on
RewriteRule ^(.*)$ https://example.com/$1 [R=301,L]
 
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
RewriteCond %{REQUEST_URI} ^(.*)/{2,}(.*)$
RewriteRule . %1/%2 [R=301,L]
</IfModule>
# END WordPress

WordPress. Восстановить пароль администратора

  • Сбросить пароль администратора WordPress с помощью FTP. Для этого необходимо войти на ваш сайт по Раздел FTP: Протокол FTP, серверы, клиенты FTP для Linux и Windows и загрузить файл functions.php вашей активной темы. Изменить файл и добавить в него код в самом начале, после первого <PHP?:
    wp_set_password ('newpassword', 1);

Где newpassword — новый пароль, а «1″ номер идентификатора пользователя в таблице wp_users. Загружаем измененный файл на ваш сайт и заходим. После того как возможность заходить в админку восстановлена, необходимо удалить установленный код, иначе он будет изменять пароль на newpassword при каждой загрузке страницы.

  • Сменить пароль администратора с помощью SQL. Для восстановления пароля с помощью SQL необходимо выполнить следующий запрос:
    UPDATE wp_users SET user_pass = MD5('newpassword') WHERE ID=1;

    И не забывайте менять префикс wp_ на тот, которым пользуетесь вы сами. Этим запросом мы меняем шифрованный Алгоритм MD5 пароль в таблице wp_users для пользователя с ID=1 на «newpassword». Можно сменить пароль и для любого другого пользователя на сайте, достаточно поменять в запросе ID на нужный. У администратора ID пользователя всегда 1. Можно также использовать запрос и с указанием конкретного логина:

    UPDATE wp_users SET user_pass = MD5('newpassword') WHERE user_login = 'admin';
  • Восстановить пароль WordPress через email. Если вы знаете логин и е-мейл администратора, то востановить пароль можно с помощью формы Забыли пароль?. Способ самый простой, но на локальном сервере это не сработает.

WordPress. Обновление

  1. Сделать Бекап как самого сайта так и БД, любым удобным вам способом
  2. Выключить все плагины
  3. Удалить директории wp-admin и wp-includes с вашего сайта
  4. Может потребоваться удалить файл .htaccess
  5. Сравнить (и если требуется изменить) содержимое старого файла wp-config.php с новым wp-config-sample.php, так как в новом файле wp-config-sample.php могли появиться новые директивы или удалены старые.
  6. Скопировать все файлы скачанного WordPress новой версии, поверх старой версии WordPress
  7. Запускаем обновление http://example.com/wp-admin/upgrade.php
Для обновления плагинов может потребоваться включить параметр define('FS_METHOD', 'direct');

WordPress. xmlrpc.php wp-config.php wp-login.php

Файл xmlrpc.php используется только для удаленной публикации статей на вашем сайте. Если вы его не используете доступ к нему должен быть закрыт. Для Apache

# Block XML-RPC requests
<Files xmlrpc.php>
Order Allow,Deny
Deny from all
</Files>

Для Nginx

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

Файл wp-config.php можно смело закрыть доступ

location = /wp-config.php {
log_not_found off;
# access_log off;
deny all;
}

Файл wp-login.php в зависимости от задач, может быть закрыт полностью по аналогии с xmlrpc.php или открыт только для определенных. Для Apache

<Files xmlrpc.php>
Order Deny,Allow
Deny from all
Allow from xxx.xxx.xxx.xxx
</Files>

WordPress. Смена siteurl

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

Переменная siteurl в WordPress отвечает за формирование относительных ссылок. Значение данной переменной записывается в БД, поэтому и изменить её можно путем редактирования БД и/или модификации файла wp-config.php.

  • Модификация wp-config.php. Для решения добавьте в файл wp-config.php строки:
    define('WP_SITEURL', 'http://example.com');
    define('WP_HOME', 'http://example.com');

    где example.com замените не название сайта.

  • Модификация параметра в БД. В таблице wp_options находим значение переменой siteurl и меняем его на нужное нам.

WordPress. Использование Cookie

  • Установить(Set a Cookie in WordPress).
add_action('init', function() {
    if (!isset($_COOKIE['my-name'])) {
        setcookie( 'my-name', 'my-value', strtotime('+1 day'), COOKIEPATH, COOKIE_DOMAIN   );
    }
});
  • Показать все куки (Get a Cookie in WordPress).
add_action( 'wp_head', 'my_getcookie' );
function my_getcookie() {
$alert = isset( $_COOKIE['my-name'] ) ? $_COOKIE['my-name'] : 'not set';
 echo "<script type='text/javascript'>alert('$alert')</script>";
 echo "<script type='text/javascript'>alert( document.cookie );</script>";
}
  • Удалить (Delete or Unset a Cookie in WordPress).
add_action( 'init', 'my_deletecookie' );
function my_deletecookie() {
setcookie( 'my-name', '', strtotime('+1 day'), COOKIEPATH, COOKIE_DOMAIN );
}

WordPress. Nginx + Apache

Рабочие примеры для WordPress.

nginx.example.net
server {
 
server_name example.net www.example.net;
listen 80;
root /var/www/example.net/public_www;
index index.php index.html index.htm;
error_log /var/log/nginx/example.net.error.log info;
access_log /var/log/nginx/example.net.access.log;
 
proxy_set_header X-Real-IP  $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
 
location = /favicon.ico {
log_not_found off;
access_log off;
}
 
location = /xmlrpc.php {
log_not_found off;
# access_log off;
deny all;
}
 
location ~ /\.ht {
deny all;
}
 
location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
# expires max; expires 1w;
expires 14d;
# log_not_found off;
# access_log off;
}
 
location / {
proxy_pass http://127.0.0.1:8080/;
}
}
apache.example.net
<VirtualHost 127.0.0.1:8080>
 
ServerAdmin webmaster@example.net
ServerName example.net
ServerAlias www.example.net
 
ServerSignature Off
 
<IfModule mpm_itk_module>
    AssignUserID webluxor webluxor
</IfModule>
 
php_admin_value open_basedir "/var/www/example.net/public_www:/tmp"
 
DirectoryIndex index.php index.html
 
DocumentRoot "/var/www/example.net/public_www"
<Directory "/var/www/example.net/public_www/">
    Options FollowSymLinks -Indexes
# for mod_rewrite changed from All to FileInfo and turn on Options FollowSymLinks
#       AllowOverride All
    AllowOverride FileInfo Limit
    Order allow,deny
    Allow from all
 
</Directory>
 
        ErrorLog /var/log/apache2/example.net.error.log
        LogLevel warn
        CustomLog /var/log/apache2/example.net.access.log combined
 
</VirtualHost>

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

.entry-content p {
text-indent: 2em;
}

Для подключения Google Analytics к WordPress можно использовать специальные плагины, например

Альтернативный вариант. Пишем код PHP для вставки в файл functions.php вашей активной темы

function my_google_analytics() {
    echo <<<'EOT'
// Ваш код Google Analytics
EOT;
}
add_action('wp_head', 'my_google_analytics');
Всем настоятельно рекомендую использовать GTM Google Tag Manager (tagmanager.google.com) для вставки GA, Метрики и других сторонних скриптов.

Задача подключить дополнительный файл CSS к текущей теме Wordpress. Код вставляем в файл темы function.php. Обязательно до функции wp_head() которая вызывается в header.php В моем случае мне нужно было изменить CSS стиль тега table.

tr:nth-child(even) {background: #yellow}
tr:nth-child(odd) { background-color: #FFCDD2 !important}
caption {background: #FFCDD2; }
function add_styles_scripts(){
   wp_enqueue_style( 'table13-style', get_template_directory_uri() .
    '/css/table13.css' );
}
 
add_action( 'wp_enqueue_scripts', 'add_styles_scripts' );

Источник кода: http://www.wphook.ru/media/auto-alt-title-caption.html. Я лишь добавил одну строку для моего удобства.

Автозаполнение атрибута alt и всех остальных полей в Wordpress при загрузке медиафайла на сайт, на основе имени медиафайла.

Код следует добавить в файл functions.php в конец файла.

//автозаполнение полей при вставке медиафайлов start
function wph_auto_alt_title_caption($attachment_ID) {
 
    $filename   = $_REQUEST['name'];
    $withoutExt = preg_replace('/\\.[^.\\s]{3,4}$/', '', $filename);
    $withoutExt = str_replace(array('-','_'), ' ', $withoutExt);
 
    $my_post = array(
        'ID'           => $attachment_ID,
        'post_excerpt' => $withoutExt,  //подпись
        'post_content' => $withoutExt,  //описание
    );
    wp_update_post($my_post);
 
    //атрибут alt
    update_post_meta($attachment_ID, '_wp_attachment_image_alt', $withoutExt);
}
add_action('add_attachment', 'wph_auto_alt_title_caption');
//автозаполнение полей при вставке медиафайлов end

На сайте WordPress можно самостоятельно прописать alt для каждой загруженной картинки. Но что делать, если изображений много, и Вы часто забываете это сделать? Способы автоматического добавления тегов alt и title название текущего товара в Woocommerce.

1 способ. (использую) Наиболее быстрым и корректным способом является использование многофункционального плагина Clearfy Pro, который автоматически заполнит пустой Alt-тег в изображениях на Вашем сайте. Для этого в настройках Clearfy Pro перейти на вкладку SEO передвинуть вправо ползунок напротив опции Автоматически проставить alt. Внимание! Для картинок товара WooCommerce alt добавлен НЕ будет, а только для картинок в тексте.

2 способ. Плагин Seo Optmized Images поддерживает Wordpress WooCommerce но только в платной версии.

3 способ. Прописать код в function.php дочерней темы для автоматического добавления тегов alt и title текущего товара в Woocommerce в теле товарной карточки. Для картинок товара добавлен НЕ будет.

// alt title for images
add_filter('wp_get_attachment_image_attributes', 'change_attachement_image_attributes', 20, 2);
function change_attachement_image_attributes($attr, $attachment) {
    global $post;
    if ($post->post_type == 'product') {
        $title = $post->post_title;
        $attr['alt'] = $title;
        $attr['title'] = $title;
    }
    return $attr;
}

Преимущества для SEO если убрать category в wordpress:

  1. Со ссылки убирается не информативная для поискового бота часть - category.
  2. URL становятся короче на 9 символов, вместе со словом выпадает один слеш "/" - это хорошо для SEO, ведь есть тенденции до уменьшения длины ссылки.
  3. Больше шансов что бот захватит и подсветит нужную часть ссылки в выдаче поисковика.
Для того чтобы убрать category URL в WordPress я использую плагин Remove Category URL By Valerio Souza, Сreativemotion.

Особенности плагина:

  • Не требует настройки, установил и все!
  • Этот плагин полностью удалит "/category/" с постоянных ссылок ( mydomain.com/category/my-category/ to mydomain.com/my-category/ ).
  • Не трогает исходные файлы Wordpress.
  • Совместим с модулями карты сайтов;
  • Автоматически настраивает редирект старых ссылок категории на новые (301 redirect, это хорошо для SEO (Search Engine Optimization) - поисковая оптимизация).

Обзор возможностей как для интернационализации, так и для локализации i18n при разработке с Гутенбергом Wordpress.

__( 'Hello World', 'my-text-domain' ): Перевести определенную строку
_x( 'Block', 'noun', 'my-text-domain' ): Перевести определенную строку с некоторым дополнительным контекстом.
_e( 'Hello World', 'my-text-domain' ): Перевести и напечатать определенную строку.
esc_html__( 'Hello World', 'my-text-domain' ): Перевести определенную строку и избежать ее для безопасного использования в выводе HTML.
esc_html_e( 'Hello World', 'my-text-domain' )Перевести определенную строку, избежать ее для безопасного использования в выводе HTML и распечатать.
_n( '%s Comment', '%s Comments', $number, 'my-text-domain' ): Переведите и получите форму единственного или множественного числа на основе предоставленного номера. 
Обычно используется в сочетании с sprintf()и number_format_i18n().

Исторически wp_localize_script()он использовался для помещения данных PHP на стороне сервера в правильно экранированный нативный объект JavaScript.

Новый редактор вводит новый подход к переводу строк для редактора через новый пакет под названием @wordpress/i18n.

Новый пакет скриптов зарегистрирован в WordPress как wp-i18nи должен быть объявлен как зависимость во время wp_register_script()и импортирован как глобальный объект Window как wp.i18n.

В зависимости от вашего рабочего процесса разработчика, вы можете использовать wp i18n make-potкоманду WP-CLI или инструмент сборки для вызова Babel @wordpress/babel-plugin-makepotдля создания необходимого файла перевода. Последний подход интегрируется с Babel для извлечения методов i18n.

Общие методы в wp.i18n:

setLocaleData( data: Object, domain: string ): Создает новый экземпляр I18N, предоставляющий данные перевода для домена.
__( 'Hello World', 'my-text-domain' ): Перевести определенную строку
_n( '%s Comment', '%s Comments', numberOfComments, 'my-text-domain' ): Переведите и получите форму единственного или множественного числа на основе предоставленного номера.
_x( 'Default', 'block style', 'my-text-domain' ): Перевести определенную строку с некоторым дополнительным контекстом.
sprintf(): Порт JavaScript функции PHP с тем же именем.

Источник: https://ru.wordpress.org/support/article/debugging-in-wordpress/

WP_DEBUG это константа PHP используемая для установки режима отладки в WordPress. По умолчанию она имеет значение «false», но может быть установлена как «true» в файле конфигурации wp-config.php на сайтах, на которых проводится отладка.

define( 'WP_DEBUG', true );
define( 'WP_DEBUG', false );

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

// Включить журнал /wp-content/debug.log
define( 'WP_DEBUG_LOG', true );
-или-
define( 'WP_DEBUG_LOG', '/tmp/wp-errors.log' );

Читайте также:

PQ VPS сервера в 28+ странах.