Инструменты пользователя

Инструменты сайта


wordpress

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Предыдущая версия справа и слева Предыдущая версия
Предыдущая версия
wordpress [2020/01/06 13:12]
wordpress [2020/07/27 20:52] (текущий)
darkfire [Как автоматически добавить alt, title к загруженным картинкам Wordpress WooCommerce?]
Строка 1: Строка 1:
 +====== WordPress ======
 +~~Title: WordPress использование, настройка ~~
 +{{htmlmetatags>
 +metatag-keywords=(WordPress, PHP)
 +metatag-description=(WordPress подключить Google Analytics и/или Яндекс Метрику. Cделать отступы в абзацах. Вопросы обновления и кеширования.)
 +}}
  
 +{{ :wordpress_install.jpg?nolink&400 |}}
 +
 +  * Homepage: [[https://uk.wordpress.org|WordPress Ukraine]] [[https://wordpress.org|WordPress English]]
 +  * [[https://developer.wordpress.org/reference/|WordPress Codex, the online manual for WordPress]]
 +  * [[лучшие wordpress плагины]]
 +
 +**Инсталляция на Debian 6.0.2 Squeeze, [[Ubuntu]] 12.04.4 LTS**
 +  * Установка недостающих зависимостей (у вас они уже могут быть установлены).<file bash>
 +aptitude install mysql-server phpmyadmin
 +aptitude install libjs-cropper libjs-prototype libjs-scriptaculous \
 + libphp-phpmailer libjs-jquery libphp-snoopy php-gettext 
 +</file>
 +  * **Инсталляция**:<file bash>
 +mkdir wordpress
 +cd wordpress/
 +wget -c https://wordpress.org/latest.zip
 +unzip latest.zip
 +cp wp-config-sample.php wp-config.php
 +</file>
 +  * Создаем в [[MySQL]] БД для нашего сайта и пользователя от которого будет работать [[CMS]] WordPress, например при помощи [[phpmyadmin]]. Полученными данными заполняем файл wp-config.php. <file sql>
 +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;
 +</file>
 +<file sql>
 +CREATE DATABASE databasename;
 +GRANT ALL PRIVILEGES ON databasename.* TO "wordpressusername"@"localhost" IDENTIFIED BY "password";
 +FLUSH PRIVILEGES;
 +</file>
 +  * Обязательно заполните уникальные ключи и соли для аутентификации в файле wp-config.php. Для этого как указано в самом файле wp-config.php удобно использовать [[https://api.wordpress.org/secret-key/1.1/salt/|генератор ключей для Wordpress]].<file>
 +# chown -R www-data:www-data /var/www/example.com
 +# chmod 600 wp-config.php
 +</file>
 +  * Заходим при помощи браузера на ваш сайт http://www.example.com/wp-admin/install.php и заполняем название сайта и пользователя с правами суперпользователя. Можно не ставить галочку напротив пункта "Разрешить поисковым системам индексировать сайт.", в дальнейшем это можно изменить в административной панели.
 +  * [[wordpress#wordpress_-_nastrojka_chpu|Настраиваем ЧПУ]] без добавления html к названию страницы, то есть <file>
 +/%category%/%postname%
 +</file>
 +
 +====== Wordpress. Права доступа в файлам и директориям ======
 +
 +Безопасные атрибуты для файлов и папок Wordpress, используя утилиту [[chmod]]: 755 на папки; 644 на файлы; 600 на wp-config.php. Для установки компонентов нужно разрешить Apache писать и удалять в директории wp-content.
 +<file bash>
 +find public_www/wp-content -type d -exec chmod 770 {} \;
 +find public_www/wp-content -type f -exec chmod 660 {} \;
 +</file>
 +
 +====== WordPress - настройка ЧПУ ======
 +
 +  * [[http://winginx.com/ru/docs/rewrites|ЧПУ без .htaccess]]
 +
 +**WordPress** - настройка **ЧПУ** (Человеку Понятный Урл([[URL]])).
 +<note warning>Прежде всего перед настройкой ЧПУ в [[Apache]] включите [[mod_rewrite]].</note>
 +
 +Настройку ЧПУ нужно выполнять сразу после установки wordpress, иначе позже дополнительно придётся настраивать перенаправление на уже проиндексированные страницы, c некрасивым URL. В административной части переходим в **Параметры->Постоянные ссылки** и мы можем там выбрать из нескольких предустановленных вариантов ЧПУ или в разделе "Произвольно" создать свой новый. Например: <file>
 +/%category%/%postname%.html
 +</file>или если вы хотите, чтобы адреса постов были без указания на категорию, тогда укажите:<file>
 +/%postname%/
 +</file>**Рекомендуется указывать категорию и не ставить слеш в конце:**<file>
 +/%category%/%postname%
 +</file> 
 +
 +<note>Символы .html (или .htm) в конце можно как указывать, так и не указывать — это больше дело личных предпочтений.</note>Эти действия приводят к созданию файла [[htaccess|.htaccess]] в корне вашего сайта (в начальной поставке Wordpress такого файла нет).
 +
 +<note>Нужно установить плагин для того, чтобы адреса с кириллицы переводились на латиницу (а лучше изначально адреса задавать в латинице), например: RusToLat, Cyr-To-Lat, на 2017 год хорошо работает плагин [[https://ru.wordpress.org/plugins/cyr3lat/|Cyr to Lat enhanced]].</note>
 +
 +===== WordPress .htaccess правильный 301 редирект =====
 +
 +В интернете, да и на этом сайте, много информации о 301 редиректе для сайтов. Но все они зачастую страдают одной ошибкой, советчики не описывают полную конфигурацию своего сервера, что делает невозможным аналогичную настройку.
 +
 +Ниже приводится код с работающего сервера, в нем настроена
 +  - Переадресация [[url_redirection#redirekts_www_na_bez_www_i_naoborot|301 редирект: с WWW]]
 +  - [[url_redirection#perenapravlenie_http_zaprosov_na_https|Перенаправление HTTP запросов на HTTPS]]
 +  - Последние строки решают проблему дублей слешей, вида https://example.com////test
 +
 +<file php>
 +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
 +</file>
 +
 +
 +====== WordPress. Восстановить пароль администратора ======
 +
 +  * **Сбросить пароль администратора WordPress с помощью FTP**. Для этого необходимо войти на ваш сайт по [[FTP]] и загрузить файл functions.php вашей активной темы. Изменить файл и добавить в него  код в самом начале, после первого <PHP?:<file>
 +wp_set_password ('newpassword', 1);
 +</file>
 +Где newpassword —  новый пароль,  а «1″ номер идентификатора пользователя в таблице wp_users. Загружаем измененный файл на ваш сайт и заходим. После того как возможность заходить в админку восстановлена, необходимо удалить установленный код, иначе он будет изменять пароль на newpassword при каждой загрузке страницы.
 +
 +  * **Сменить пароль администратора с помощью SQL**. Для восстановления пароля с помощью [[SQL]] необходимо выполнить следующий запрос:<file>
 +UPDATE wp_users SET user_pass = MD5('newpassword') WHERE ID=1;
 +</file> И не забывайте менять префикс wp_ на тот, которым пользуетесь вы сами. Этим запросом мы меняем шифрованный [[MD5]] пароль в таблице wp_users для пользователя с ID=1 на «newpassword». Можно сменить пароль и для любого другого пользователя на сайте, достаточно поменять в запросе ID на нужный. У администратора ID пользователя всегда 1. Можно также использовать запрос и с указанием конкретного логина:<file>
 +UPDATE wp_users SET user_pass = MD5('newpassword') WHERE user_login = 'admin';
 +</file>
 +  * **Восстановить пароль WordPress через email**. Если вы знаете логин и е-мейл администратора, то востановить пароль  можно с помощью формы Забыли пароль? Способ самый простой, но на локальном сервере это не сработает.
 +====== WordPress. Обновление ======
 +
 +  - Сделать Бекап как самого сайта так и БД, любым удобным вам способом
 +  - Выключить все плагины
 +  - Удалить директории wp-admin и wp-includes с вашего сайта
 +  - Может потребоваться удалить файл .htaccess
 +  - Сравнить (и если требуется изменить) содержимое старого файла wp-config.php с новым wp-config-sample.php, так как в новом файле wp-config-sample.php могли появиться новые директивы или удалены старые.
 +  - Скопировать все файлы скачанного WordPress новой версии, поверх старой версии WordPress
 +  - Запускаем обновление http://example.com/wp-admin/upgrade.php
 +
 +<note tip>Для обновления плагинов может потребоваться включить параметр define('FS_METHOD', 'direct');</note>
 +====== WordPress Плагины кэширование ======
 +
 +В самом ядре WordPress кэширование страниц не реализовано, но есть все необходимые функции для реализации этого на уровне плагинов.
 +
 +  * [[Кэширование сайта]]: теория и практика, обзор плагинов для кэширования страниц в Wordpress: W3 Total Cache, WP Super Cache, Hyper Cache, Hyper Cache, WP-Rocket, WP Fastest Cache.
 +====== WordPress. xmlrpc.php wp-config.php wp-login.php ======
 +
 +**Файл xmlrpc.php** используется только для удаленной публикации статей на вашем сайте. Если вы его не используете доступ к нему должен быть закрыт. Для Apache <file bash>
 +<Files xmlrpc.php>
 +Order Deny,Allow
 +Deny from all
 +</Files>
 +</file>Для Nginx<file php>
 +location = /xmlrpc.php {
 +log_not_found off;
 +# access_log off;
 +deny all;
 +}
 +</file>
 +
 +**Файл wp-config.php** можно смело закрыть доступ<file bash>
 +location = /wp-config.php {
 +log_not_found off;
 +# access_log off;
 +deny all;
 +}
 +</file>
 +**Файл wp-login.php** в зависимости от задач, может быть закрыт полностью по аналогии с xmlrpc.php или открыт только для определенных. Для Apache<file bash>
 +<Files xmlrpc.php>
 +Order Deny,Allow
 +Deny from all
 +Allow from xxx.xxx.xxx.xxx
 +</Files>
 +</file>
 +
 +====== WordPress. Смена siteurl ======
 +
 +**Данная задача возникает**, если вам потребовалось поднять копию WordPress сайта под другом имени домена.
 +
 +Переменная siteurl в WordPress отвечает за формирование относительных ссылок. Значение данной переменной записывается в БД, поэтому и изменить её можно путем редактирования БД и/или модификации файла wp-config.php.
 +
 +  * **Модификация wp-config.php**. Для решения добавьте в файл wp-config.php строки:<file php>
 +define('WP_SITEURL', 'http://example.com');
 +define('WP_HOME', 'http://example.com');
 +</file>где example.com замените не название сайта.
 +  * **Модификация параметра в БД.** В таблице wp_options находим значение переменой siteurl и меняем его на нужное нам.
 +
 +====== WordPress. Использование Cookie ======
 +
 +  * [[Cookie]]
 +
 +  * Установить(Set a Cookie in WordPress).
 +<file php>
 +add_action('init', function() {
 +    if (!isset($_COOKIE['my-name'])) {
 +        setcookie( 'my-name', 'my-value', strtotime('+1 day'), COOKIEPATH, COOKIE_DOMAIN   );
 +    }
 +});
 +</file>
 +  * Показать все куки (Get a Cookie in WordPress).
 +<file php>
 +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>";
 +}
 +</file>
 +  * Удалить (Delete or Unset a Cookie in WordPress).
 +<file php>
 +add_action( 'init', 'my_deletecookie' );
 +function my_deletecookie() {
 +setcookie( 'my-name', '', strtotime('+1 day'), COOKIEPATH, COOKIE_DOMAIN );
 +}
 +</file>
 +====== WordPress. Nginx + Apache ======
 +Рабочие примеры для WordPress.<file bash 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/;
 +}
 +}
 +</file><file bash 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>
 +</file>
 +
 +===== WordPress: Cделать отступы в абзацах =====
 +
 +На сайтах сделанных на WordPress нет отступов первой строчки абзацев. Для добавления абзаца изменим файл style.css нашей темы, где класс entry-content сявляется оберткой для постов. Название класса может быть другим для вашей темы, узнайте его исследовав элемент вашей страницы.
 +
 +<file css>
 +.entry-content p {
 +text-indent: 2em;
 +}
 +</file>
 +
 +===== WordPress: подключить Google Analytics и/или Яндекс Метрику =====
 +
 +
 +Для подключения [[SEO|Google Analytics]] к WordPress можно использовать специальные плагины, например
 +  * [[https://wordpress.org/plugins/google-analytics-for-wordpress/|The Google Analytics for WordPress by MonsterInsights]]
 +  * [[https://wordpress.org/plugins/google-analyticator/|Google Analyticator]]
 +
 +**Альтернативный вариант.** Пишем код PHP для вставки в файл functions.php вашей активной темы<file php>
 +function my_google_analytics() {
 +    echo <<<'EOT'
 +// Ваш код Google Analytics
 +EOT;
 +}
 +add_action('wp_head', 'my_google_analytics');
 +</file>
 +<note>Всем **настоятельно рекомендую использовать GTM Google Tag Manager** (tagmanager.google.com) для вставки GA, Метрики и других сторонних скриптов.</note>
 +
 +===== WordPress: подключить файл CSS =====
 +
 +Задача подключить дополнительный файл CSS к текущей теме Wordpress. Код вставляем в файл темы function.php. Обязательно до функции wp_head() которая вызывается в header.php В моем случае мне нужно было изменить CSS стиль тега table. <file css>
 +tr:nth-child(even) {background: #yellow}
 +tr:nth-child(odd) { background-color: #FFCDD2 !important}
 +caption {background: #FFCDD2; }
 +</file>
 +
 +
 +<file php>
 +function add_styles_scripts(){
 +   wp_enqueue_style( 'table13-style', get_template_directory_uri() .
 +    '/css/table13.css' );
 +}
 +
 +add_action( 'wp_enqueue_scripts', 'add_styles_scripts' );
 +</file>
 +
 +===== Как автоматически заполнять поля alt, caption и description при загрузке файлов? =====
 +
 +Источник кода: [[http://www.wphook.ru/media/auto-alt-title-caption.html]]. Я лишь добавил одну строку для моего удобства.
 +
 +Автозаполнение атрибута alt и всех остальных полей в Wordpress при загрузке медиафайла на сайт, на основе имени медиафайла. 
 +
 +Код следует добавить в файл functions.php в конец файла.
 +
 +<file 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
 +</file>
 +===== Как автоматически добавить alt, title к загруженным картинкам Wordpress WooCommerce? =====
 +На сайте WordPress можно самостоятельно прописать alt для каждой загруженной картинки. Но что делать, если изображений много, и Вы часто забываете это сделать? Способы автоматического добавления тегов alt и title название текущего товара в Woocommerce.
 +
 +**1 способ. (использую)** Наиболее быстрым и корректным способом является использование многофункционального [[https://wow2.top/clearfy-pro/|плагина Clearfy Pro]], который автоматически заполнит пустой Alt-тег в изображениях на Вашем сайте. Для этого в настройках Clearfy Pro перейти на вкладку SEO передвинуть вправо ползунок напротив опции Автоматически проставить alt. Внимание! Для картинок товара [[#woocommerce_storefront|WooCommerce]] alt добавлен НЕ будет, а только для картинок в тексте.
 +
 +  * [[https://wpschool.ru/auto-set-alt/|Как автоматически добавить атрибут Alt в WordPress]]
 +  * [[http://info-effect.ru/dobavit-atribut-alt-dlya-vsex-izobrazhenij-wordpress-avtomaticheski.html|Добавить атрибут alt для всех изображений wordpress автоматически !]]
 +
 +**2 способ.** Плагин [[https://ru.wordpress.org/plugins/seo-optimized-images/|Seo Optmized Images]] поддерживает Wordpress WooCommerce но только в платной версии.
 +
 +**3 способ.** Прописать код в function.php дочерней темы для автоматического добавления тегов alt и title текущего товара в Woocommerce в теле товарной карточки. Для картинок товара добавлен НЕ будет.<file php>
 +// 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;
 +}
 +</file>