G|Translate: English EN Deutsch DE Italiano IT Русский RU Español ES Українська UK

Как сделать перенос длинной ссылки (URL) на другую строку

Длинная ссылка URL выходит за пределы блока

Как сделать перенос длинной ссылки (URL) на другую строку

Вот, например, ссылка на сайт MS
https://docs.microsoft.com/ru-ru/microsoftteams/platform/concepts/build-and-test/deep-links?tabs=teamsjs-v2

При просмотре на широком экране все в порядке.

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

Как сделать перенос длинной ссылки (URL) на другую строку

Вроде немного ссылка за пределы блока вышла – но получается так.

Как сделать перенос длинной ссылки (URL) на другую строку

И самое плохое – наша кнопка “Обратная связь” оказалась за пределами экрана мобильной версии.

Особенно такая беда в бесплатных темах WordPress.

Как это исправить?

Нам нужен CSS для указания переноса строк

Таблицы каскадных стилей управляют выводом браузера на экран.

Кратко о синтаксисе – указываем селектор и как выводить содержимое (в фигурных скобках)

  • с точной – это класс
  • с решеткой – это по id элемента
  • без точки или решетки – это тэг html

Вот как последний вариант там и нужен.

Вспоминаем, что ссылки – это <a>…</a>

Вот простое решение – силовой перенос “break-all”, если содержимое не помещается в контейнер.

Нам не важен разрыв и читаемость – это всё равно  ссылка

a { 
word-break : break-all;
}

Плагин Simple Custom CSS

https://ru.wordpress.org/plugins/simple-custom-css/

Как сделать перенос длинной ссылки (URL) на другую строку

Плагин добавляет позицию в меню “Внешний вид”.

Добавляем  наш код CSS и смотрим на результат.

А теперь все хорошо :) 

Как сделать перенос длинной ссылки (URL) на другую строку

И ссылка перенеслась.

И кнопка обратной связи на месте.

 


Ограничение 100 Мб для бесплатной версии All-in-One WP Migration

Есть такой плагин для архивирования сайта  All-in-One WP Migration

Ограничение 100 Мб для бесплатной версии All-in-One WP Migration

Читаем статью

Плагины для архивирования и переноса сайта

Было так:

  • тестовый вариант до 64 Мб
  • бесплатный вариант (расширение Basic) до 500 Мб
  • выше 500 Мб сайт – платный вариант

Ограничение 100 Мб для бесплатной версии All-in-One WP Migration

А стало так:

  • бесплатный вариант до 100 МБ
  • платный вариант – сайты более 100 Мб

Ссылка на расширение к плагину

https://import.wp-migration.com/en

Ограничение 100 Мб для бесплатной версии All-in-One WP Migration

Чувствуете, что одной колонки не хватает?

Остался вариант только  “премиум”. Причем при создании архива Вам плагин ничего не сообщает, что правила игры изменились. Плагин дает возможность создать архив для любого объема сайта.

В результате архив у Вас есть – а восстановить Вы его не можете. Нужно купить платную версию.

Вот цены.

Ограничение 100 Мб для бесплатной версии All-in-One WP Migration

  • 69 долл. для частного использования
  • 69 долл. + 29 долл. в месяц для бизнеса

Понятно, разработчики тоже кушать хотят.

Но так делать некрасиво – набираем базы пользователей на одних условиях, потом резко меняем правила игры.

Хотя возможность получить свои файлы разработчики оставили, есть специальное приложение

https://traktor.wp-migration.com/

Плагины для архивирования и переноса сайта

После распаковки в папке будут:

  • все файлы движка WP
  • дамп базы данных
  • файл формата .json с основными параметрами сайта (созданный из данных wp-config.php)

Новые столбцы в админке WordPress

Как добавить свои столбцы в административной панели WordPress

Новые столбцы в админке WordPress

Нужно в простом варианте сделать несколько вещей:

  • создать саму колонку и его название (через add_filter)
  • заполнить его данными (через add_action)
  • при необходимости включить возможность сортировки колонки (через add_filter)

Создаем колонку

// создаем новую колонку для записей
add_filter( 'manage_'.'post'.'_posts_columns', 'tsl_manage_pages_columns', 4 );
function tsl_manage_pages_columns( $columns ){
    $columns = array( 'views' => 'Визиты' );
    return $columns;
}

Итого в массиве $columns появится новый элемент (обычно в самом конце)

Заполняем данными

//добавляем данные в колонку
add_action('manage_'.'post'.'_posts_custom_column', 'tsl_views_column', 5, 2 );
function tsl_views_column( $colname, $post_id ){
    if( $colname === 'views' ){
        echo get_post_meta( $post_id, 'views', 1 ); 
    }
}

Подробно можно прочитать в статье ниже

Добавляем колонки у постов в админке (сортируемые)

Как добавить колонку в нужное место в списке постов/страниц в административной панели

Вот тут есть фокус, который показан в статье выше – и почему-то не работает нормально…

Указываем номер столбца при создании

function tsl_manage_pages_columns( $columns ){
    $new_columns = array( 'views' => 'Визиты' );
    // разделяем массив колонок и вставляем новую в нужное место
    $num = 4;
    $my_columns = array_slice( $columns, 0, $num, true ) + $new_columns + array_slice( $columns, $num, NULL, true );
return $my_columns;
}

Используем стандартную функцию PHP array_slice(), которая позволяет разрезать массив (с именами и ключами столбцов) в нужном месте + вставляем нашу колонку.

Почему каждый раз получается как-то криво? В разных местах?

Потому то, что мы видим на экране – не соответствует порядку и номерам колонок :) Более того – они разные для списка постов и страниц.

Для списка постов:

  • Заголовок
  • Автор
  • Рубрики
  • Метки
  • Комментарии
  • Дата  – 5-й элемент массива

Новые столбцы в админке WordPress

Из-за того, что часть колонок скрыта – на экране Дата выведена второй колонкой.

Для списка страниц:

  • Заголовок
  • Автор
  • Комментарии
  • Дата  – 3-й элемент массива

Новые столбцы в админке WordPress

Аналогично – часть колонок скрыта и Дата на второй позиции

Решение. 

Что бы вставить свою колонку в нужное место (например после столбца Дата) – необходимо в массиве $columns (который на входе в Вашу функцию создания) найти элемент:

  • с ключом post_published
  • с названием Дата

и определить его позицию в массиве.

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

// создаем новую колонку для записей 
add_filter( 'manage_'.'post'.'_posts_columns', 'tsl_manage_pages_columns', 4 );
// создаем новую колонку для страниц
add_filter( 'manage_'.'page'.'_posts_columns', 'tsl_manage_pages_columns', 4 );

Функция PHP date() и ядро WordPress

Это же просто.

Функция PHP date() и ядро WordPress

Возвращается текущая дата и текущее локальное время сервера (с правильно установленной таймзоной).

Вот каждый может проверить

https://wpavonis.ru/server.php

Но если запустить этот же код из среды WordPress – мы получим другие результаты

UTC
2021-11-20 07:42:01

Что это за фокус?

Почему время по Гринвичу  и таймзона другая? WordPress живет в прошлом?

ДА! Как говорится – “это не баг, а фича”.

При запуске ядро WP устанавливает таймзону на UTC. Сделано это специально.

Вот тут подробнее.

https://wp-kama.ru/function/current_time

ВАЖНО: Функция учитывает время сервера установленное в date.timezone setting и переписывает его в момент инициализации системы, используя date_default_timezone_set('UTC') в файле wp-settings.php. Такой подход позволяет получать как реальное UTC время, так и измененное локальное время сайта.

Вот тут

Функция PHP date() и ядро WordPress

Поэтому в WordPress сделана специальная функция current_time() – возвращает текущее время сайта, учитывается настройка временной зоны на сайте (timezone). Формат аналогичный date() PHP.

ВАЖНО: один и тот же код PHP с использованием date() будет возвращать разные результаты при работе вне и внутри ядра WordPress. 

Неожиданно :)

Вообщем  – для плагинов WordPress используйте current_time().

P.S. В общем случае у нас есть ЧЕТЫРЕ времени:

  • время UTC/GMT (Гринвич)
  • время сервера (его временная зона)
  • время сайта WordPress (при правильной установке будет совпадать с временем сервера)
  • время на локальной машине пользователя (можно получить через JS)

Данный механизм позволяет “перетаскивать” сайт с одного хостинга на другой, не заботясь о том, какое именно системное время установлено на хостинге (и в какой стране расположен этот хостинг). Фактически WordPress переносит свое время, которое Вы установили в настройках сайта.

Другая проблема – очень непросто изнутри WordPress получить именно системное время сервера – так как функция PHP date() будет работать с учетом таймзоны UTC.

Нужно открывать и смотреть данные из системных файлов.

Вот вариант ниже с чтением информации из системных файлов:

  • /etc/localtime // Mac OS X (and older Linuxes) 
  • /usr/share/zoneinfo
  • /etc/timezone // Ubuntu / Debian
  • /etc/sysconfig/clock // RHEL / CentOS

https://bojanz.wordpress.com/2014/03/11/detecting-the-system-timezone-php/

Код из статьи

$timezone = 'UTC';
if (is_link('/etc/localtime')) {
    // Mac OS X (and older Linuxes)    
    // /etc/localtime is a symlink to the 
    // timezone in /usr/share/zoneinfo.
    $filename = readlink('/etc/localtime');
    if (strpos($filename, '/usr/share/zoneinfo/') === 0) {
        $timezone = substr($filename, 20);
    }
} elseif (file_exists('/etc/timezone')) {
    // Ubuntu / Debian.
    $data = file_get_contents('/etc/timezone');
    if ($data) {
        $timezone = $data;
    }
} elseif (file_exists('/etc/sysconfig/clock')) {
    // RHEL / CentOS
    $data = parse_ini_file('/etc/sysconfig/clock');
    if (!empty($data['ZONE'])) {
        $timezone = $data['ZONE'];
    }
}
 
date_default_timezone_set($timezone);

 Как вариант – запускать внешний скрипт PHP с функцией date() через exec().

Если Вы хотите показывать клиенту на фронтенде его реальное локальное время – то Вы можете это время взять с его локальной машины через JS.


Обновление плагина вывода списка страниц в конце поста

Вышла версия 1.9 плагина tsl-plugin-out-list-posts

Обновление плагина вывода списка страниц в конце поста

Страница плагина находится здесь

Плагин вывода анонсов постов в конце контента

Плагин добавляет в конце текста анонсы дочерних или одноуровневых страниц для текущего контента.

Обновление плагина вывода списка страниц в конце поста

Логика вывода:

  • список дочерних страниц
  • при отсутствии дочерних страниц – выводятся страницы одного уровня
  • при наличии и дочерних страниц и страниц одного уровня – выводятся дочерние страницы
  • на верхнем уровне при отсутствии дочерних страниц ничего не выводится

 

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

Для примера дерево страниц.

  • Верхняя страница
    • Средняя страница 1
    • Средняя страница 2
    • Средняя страница 3
      • Нижняя страница  3 1
      • Нижняя страница 3 2
      • Нижняя страница 3 3

Как видно – у страница “Средняя страница 3” есть и дочерние страницы и страницы одного уровня.

 

Вариант 1 – у верхней страницы нет дочерних

ничего дополнительно выведено не будет

Обновление плагина вывода списка страниц в конце поста

вывода нет – т.е. не показываем остальные страницы верхнего уровня, для этого есть меню.


Вариант 2 – у страницы есть дочерние страницы

в конце контекста показываем список дочерних страниц

Обновление плагина вывода списка страниц в конце поста

вывод дочерних страниц


Вариант 3 – у страницы есть и дочерние страницы и страницы одного уровня

будут показаны дочерние страницы

Обновление плагина вывода списка страниц в конце поста

вывод дочерних страниц  и ссылка на самый верхних уровень


Вариант 4 – у страницы есть только страницы одного уровня

выводим список страниц одного уровня

Обновление плагина вывода списка страниц в конце поста    

 

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

Обновление плагина вывода списка страниц в конце поста

Данная схема помогает предложить посетителю сайта ссылки на материалы одной тематики. В конечном счете улучшается SEO:

  • увеличивается глубина просмотра
  • на текущей странице появляется дополнительный контент

Прячем информационные файлы WordPress

После установки WordPress в папке сайта создаются несколько информационных файлов

Прячем информационные файлы WordPress

Это собственно файлы:

  • license.txt
  • readme.html

Их можно просмотреть через прямой доступ в строке URL. Ранее в файлах добрый WP указывал установленную версию, чем облегчал работу хакеров. Теперь убрали, но нельзя гарантировать, что в будущих обновлениях снова не добавят.

Поэтому лучше закрыть.

Совет “Удалить после установки!” не подходит – т.к. при обновлении эти файлы будут восстановлены.

Файл license.txt

Описание лицензии GPL и указание на CMS WP 

Прячем информационные файлы WordPress

Файл readme.html

Общее описание WordPress

Прячем информационные файлы WordPress

Файл wp-config-sample.php

Это, собственно, не информационный файл. Это образец для создания файла wp-config.php уже с данными базы данных и ключами (в процессе установки).

Прячем информационные файлы WordPress 

Тем не менее – желающих его открыть много. Что они хотят получить в итоге – непонятно. Но сервер бессмысленную работу делает.

Надо тоже его закрыть от любопытных.

Закрываем доступ через инструкции .htaccess для Apache

C учетом возможных двух версий Apahce (ver 1 и ver 2) у хостеров (наличие/отсутствие модуля mod_authz_core.c) делаем следующий вариант

# block license.txt --------------------------------------
<Files license.txt>
<IfModule mod_authz_core.c>
Require all denied
</IfModule>
<IfModule !mod_authz_core.c>
Order deny,allow
Deny from all
</IfModule>
</Files>
# block readme.html --------------------------------------
<Files readme.html>
<IfModule mod_authz_core.c>
Require all denied
</IfModule>
<IfModule !mod_authz_core.c>
Order deny,allow
Deny from all
</IfModule>
</Files>
# block wp-config* ----------------------------------------
<Files "wp-config*">
<IfModule mod_authz_core.c>
Require all denied
</IfModule>
<IfModule !mod_authz_core.c>
Order deny,allow
Deny from all
</IfModule>
</Files>

Если модуль mod_authz_core.c есть – то Require all denied

Если модуля mod_authz_core.c нет – по старому варианту через Deny from all

Для wp-config делаем имя со звездочкой, это закроет файлы от внешнего доступа:

  • wp-config-sample.php
  • wp-config.php

Результат

Прячем информационные файлы WordPress

Доступ запрещен, ошибка 403.  Хорошо.


WordPress 5.6 – результаты поиска на сайте стали попадать в индекс

В версии WP 5.6 страница с результатами поиска изменилась и стала попадать в индекс поисковых машин

WordPress 5.6 - результаты поиска на сайте стали попадать в индекс

Что это такое? 

А это теперь WordPress оптимизировал URL выдачи результатов внутреннего поиска в виде domen.ru/search/term

Ранее было domen.ru/? s = term

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

Если в этот момент на страницу заходит поисковый  робот:

  • он её проверяет
  • получает ответ от сервера 200 ОК  (даже при отрицательных результатах поиска!)
  • ой
  • и радостно сохраняет в индексе

Вот так это выглядит в строке URL

WordPress 5.6 - результаты поиска на сайте стали попадать в индекс 

Для запрета поисковым роботам индексации необходимо добавить в файл robots.txt инструкцию

Disallow: /search

Это запрет на индекс папки и её содержимого.

Подробнее читаем в статье

Файл robots.txt

UPD

В обновлении WordPress 5.6.1 исправили – теперь страница поиска закрыта тэгом ‘noindex’ и код 200 не возвращается.

WordPress 5.6 - результаты поиска на сайте стали попадать в индекс

И хорошо.

А то тупые китайские боты могли наделать кучу бессмысленных страниц в индексе….


В WP 5.6 добавлена базовая авторизация HTTP

Можно увидеть в файле .htaccess новую строку

В WP 5.6 добавлена базовая авторизация HTTP

Это добавлена возможность создавать пароли приложений:

  • на сайте должно быть включено шифрование SSL (протокол HTTPS)
  • для API WP
  • для защиты мобильного входа в админку xml-rpc.php (через сервер WordPress)

Подробнее можно прочитать в статье 

Пароли приложений (авторизация)

Сделано на основе плагина Application Passwords

Пароли можно установить в управлении учетной записью пользователя

В WP 5.6 добавлена базовая авторизация HTTP

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

Фактически Вы привязываете свое мобильное устройство к мобильной административной панели своего сайта.

Пароли приложения также можно установить по дополнительной ссылке в панели управления

domen.ru/wp-admin/authorize-application.php

В WP 5.6 добавлена базовая авторизация HTTP

Если у Вас включена базовая авторизация административной панели wp-login.php – то почему-то не работает…

Или такой вариант сделан

Двухфакторная аутентификация WordPress

Выдает предупреждение: Ваш сайт, похоже, использует базовую HTTP авторизацию, которая в настоящее время несовместима с паролями приложений

В WP 5.6 добавлена базовая авторизация HTTP

Т.е. можно пока или основной вход или мобильный вход в админку защитить дополнительной авторизацией. Странно.

Наверное, в WP 5.7 исправят.


Плагин Duplicator опасно сохраняет архив

Наш любимый плагин Duplicator для архивирования сайта

Плагин Duplicator опасно сохраняет архив

Основная статья тут

Плагины для архивирования и переноса сайта

Запускаем создание пакета (версия плагина 1.3.37)

Плагин Duplicator опасно сохраняет архив

Готово. Смотрим, а что там на сервере?

А в папке на сервере есть копия файла wp-config.txt (тестовая версия wp-config.php). 

Плагин Duplicator опасно сохраняет архив

А попробуем её открыть по URL (mysite.ru/wp-snapshots/name_wp-config.txt).

Упс. Всё прекрасно открывается.

Часть параметром базы из копии убрана – но всё равно, опасная игра. Полное название файла можно легко восстановить, зная как плагин его формирует.

Плагин Duplicator опасно сохраняет архив

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

Всегда проверяйте, что там плагины в реальности делают…

UPD.

В версии 1.3.40 уже исправили, больше нет копии wp-config.php в отдельном файле (и соответственно с прямым URL).


Вышла новая версия плагина (widget) вывода списка авторов 1.2

В новой версии плагина

Вышла новая версия плагина (widget) вывода списка авторов  1.2

добавлена возможность управлением показа e-mail автора.

Сам плагин можно скачать здесь

Плагин вывода списка авторов блога (виджет)

В настройках – по умолчанию показ включён

Вышла новая версия плагина (widget) вывода списка авторов  1.2

Без почты автора строки с e-mail в выводе не будет

Вышла новая версия плагина (widget) вывода списка авторов  1.2

Пользуйтесь на здоровье :)