Начнем с главного, а это значит с хостинга, так вот WordPress.org официально рекомендует только три хостинга провайдера, это DreamHost, BlueHost и SiteGround. Мое личное мнение, если выбирать из этих трех, то это DreamHost, а так достаточно много прекрасных альтернатив от Zomro (Зомро) и СХОСТ (S-Host) до Perfect Quality Hosting (PQ)
Скачать последнюю версию Wordpress:
wget -c https://wordpress.org/latest.zip
WordPress Плагины кэширования: В самом ядре WordPress кэширование страниц не реализовано, но есть все необходимые функции для реализации этого на уровне плагинов.
Инсталляция на 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> 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;
# chown -R www-data:www-data /var/www/example.com # chmod 600 wp-config.php
/%category%/%postname%
Безопасные атрибуты для файлов и папок 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 - настройка ЧПУ (Человеку Понятный Урл(Что такое ссылка URL)).
Настройку ЧПУ нужно выполнять сразу после установки wordpress, иначе позже дополнительно придётся настраивать перенаправление на уже проиндексированные страницы, c некрасивым URL. В административной части переходим в Параметры→Постоянные ссылки и мы можем там выбрать из нескольких предустановленных вариантов ЧПУ или в разделе "Произвольно" создать свой новый. Например:
/%category%/%postname%.html
или если вы хотите, чтобы адреса постов были без указания на категорию, тогда укажите:
/%postname%/
Рекомендуется указывать категорию и не ставить слеш в конце:
/%category%/%postname%
Эти действия приводят к созданию файла .htaccess в корне вашего сайта (в начальной поставке Wordpress такого файла нет).
В интернете, да и на этом сайте, много информации о 301 редиректе для сайтов. Но все они зачастую страдают одной ошибкой, советчики не описывают полную конфигурацию своего сервера, что делает невозможным аналогичную настройку.
Ниже приводится код с работающего сервера, в нем настроена
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
wp_set_password ('newpassword', 1);
Где newpassword — новый пароль, а «1″ номер идентификатора пользователя в таблице wp_users. Загружаем измененный файл на ваш сайт и заходим. После того как возможность заходить в админку восстановлена, необходимо удалить установленный код, иначе он будет изменять пароль на newpassword при каждой загрузке страницы.
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';
Файл 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 отвечает за формирование относительных ссылок. Значение данной переменной записывается в БД, поэтому и изменить её можно путем редактирования БД и/или модификации файла wp-config.php.
add_action('init', function() { if (!isset($_COOKIE['my-name'])) { setcookie( 'my-name', 'my-value', strtotime('+1 day'), COOKIEPATH, COOKIE_DOMAIN ); } });
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>"; }
add_action( 'init', 'my_deletecookie' ); function my_deletecookie() { setcookie( 'my-name', '', strtotime('+1 day'), COOKIEPATH, COOKIE_DOMAIN ); }
Рабочие примеры для WordPress.
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/; } }
<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');
Задача подключить дополнительный файл 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:
Ранее, для того чтобы убрать category URL в WordPress я использовал плагин Remove Category URL By Valerio Souza, Сreativemotion, но на 2024 это плагин не поддерживается.
Если у вас установлен плагин Yoast SEO вы можете отключить показ в URL префикса category. Для этого в настройка плагина перейдите в настройки рубрики и отключите параметр "Сохраните префикс категорий в ярлыке".
Обзор возможностей как для интернационализации, так и для локализации 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' );
Читайте также: