Skip navigation
Обновлено
7 июня, 2024

WPML Sticky Links предотвращает разрыв ссылок между страницами и записями, даже если страницы перемещаются и переименовываются.

В WordPress слишком легко изменить адреса страниц, в результате чего все входящие ссылки будут нарушены (ошибка 404). Вот несколько действий, которые могут привести к ошибке 404:

  • Изменение родительской страницы
  • Смена слаг
  • Изменение структуры постоянных ссылок сайта

WPML не позволяет изменениям URL нарушать входящие ссылки. Когда Вы создаете ссылку, WPML автоматически делает ее липкой. Вместо того чтобы хранить URL этой страницы (на момент создания ссылки), он хранит номер страницы. Это никогда не изменится, что бы Вы ни делали.

Затем, когда страница отображается, WPML вставляет постоянную ссылку на страницу, на которую Вы ссылаетесь. При изменении URL все страницы, ссылающиеся на него, немедленно обновляются и ссылаются на правильный адрес.

На следующих скриншотах показано, как выглядят внутренние ссылки в базе данных после включения функции Sticky Links.

Ссылки, ставшие Sticky Links с помощью WPML, просматриваются в редакторе блоков
Ссылки, ставшие Sticky Links с помощью WPML, просматриваются в редакторе блоков
Ссылки, ставшие Sticky Links с помощью WPML, просматриваются в редакторе Classic.
Ссылки, ставшие Sticky Links с помощью WPML, просматриваются в редакторе Classic.

Ваши пользователи никогда не увидят эти «странные» ссылки. Вместо этого WPML заменит их постоянными ссылками при отображении страниц.

Включив модуль Sticky Links, Вы можете контролировать, какие строки он обрабатывает. Для этого перейдите на страницу WPML Sticky Links .

Sticky Links перед обработкой
Sticky Links перед обработкой

По умолчанию WPML превращает все ссылки в теле сообщения в липкие ссылки. Вы также можете превратить ссылки в виджетах и строках в липкие ссылки.

WPML позволит Вам пакетно заменить все обычные ссылки на липкие. Он также сообщит о всех существующих неработающих ссылках и поможет их исправить.

Если Вы включили Sticky Links после создания некоторого контента, ссылки в существующем контенте не сразу превратятся в «липкие».

Экран администратора Sticky Links подскажет Вам, какой объем контента может содержать обычные (не липкие) ссылки. WPML может просканировать этот контент и преобразовать все ссылки в «липкие». Для этого нажмите на кнопку Сканировать.

Вы всегда можете вернуть свои ссылки к обычным (не липким) постоянным ссылкам, нажав на кнопку Revert sticky URLs to permalinks.

Ссылки на страницы на другом языке

Иногда Вам может понадобиться вставить ссылку на страницу на другом языке. Поскольку Sticky Links настраивает ссылки автоматически, он может помешать Вам сделать это и настроить ссылку так, чтобы она указывала на тот же язык.

Чтобы иметь возможность добавлять ссылки на страницы на других языках, Вам необходимо добавить следующий фильтр в файл functions.php Вашей темы.

Allow links to pages in other languages
add_filter( 'wpml_sl_blacklist_requests', 'wpml_sl_blacklist_requests', 10, 2 );

function wpml_sl_blacklist_requests( $blacklist, $sitepress ) {
    $blacklist[] = 'documentation';
    return $blacklist;
}

В приведенном выше коде используйте массив $blacklist , чтобы указать все слаги URL для страниц на оригинальных языках, на которые Вы хотите сделать ссылку.

В нашем примере мы хотим сделать ссылку на английскую версию страниц «Документация» (слаг «documentation») и «Конструкторы страниц» (слаг «page-builders»), поэтому мы используем следующие две строки:

Example of specifying the list of URLs to allow linking to
$blacklist[] = 'documentation';

$blacklist[] = 'page-builders';

Работа со ссылками внутри содержимого шорткодов

По умолчанию плагин Sticky Links не ищет ссылки, сгенерированные шорткодами.

Если на Вашей странице есть шорткод, генерирующий ссылку типа «?page_id=XX«, она будет отображаться у пользователей без преобразования в постоянную ссылку.

Чтобы обработать контент этих шорткодов с помощью Sticky Links, добавьте этот фрагмент в Ваш файл functions.php:

Handle links inside shortcode content
if ( class_exists( 'WPML_Sticky_Links' ) ) {
	global $WPML_Sticky_Links;
	add_filter( 'do_shortcode_tag', [ $WPML_Sticky_Links, 'show_permalinks' ], 0 );
}