WPML スティッキーリンクは、ページが移動したり名前が変更されたりしても、ページや投稿間のリンクが壊れるのを防ぎます。
WordPressではページのアドレスを簡単に変更できるため、すべての受信リンクが壊れてしまう(404エラー)ことがあります。404エラーの原因となる可能性があるアクションは以下のとおりです。
- ページの親の変更
- スラッグの変更
- サイトのパーマリンク構造の変更
WPMLは、URLの変更によって受信リンクが壊れるのを防ぎます。リンクを作成すると、WPMLは自動的にそれをスティッキー(固定)にします。(リンク作成時の)ページのURLを保存する代わりに、ページ番号を保存します。これは、何を行っても変更されることはありません。
そして、ページが表示される際に、WPMLはリンク先ページのパーマリンクを挿入します。URLが変更されるたびに、そのページにリンクしているすべてのページが即座に更新され、正しいアドレスにリンクされます。
以下のスクリーンショットは、スティッキーリンクを有効にした後、内部リンクがデータベース内でどのように表示されるかを示しています。
ユーザーがこのような「奇妙な」リンクを目にすることはありません。代わりに、WPMLはページを表示する際にこれらを現在のパーマリンクに置き換えます。
スティッキーリンクのコントロール
スティッキーリンクモジュールを有効にすると、処理する文字列を制御できます。これを行うには、WPML → スティッキーリンクページに移動します。

デフォルトでは、WPMLは投稿本文内のすべてのリンクをスティッキーリンクに変換します。ウィジェットや文字列内のリンクをスティッキーリンクに変換することもできます。
WPMLを使用すると、すべての通常のリンクをスティッキーリンクに一括置換できます。また、既存の壊れたリンクを報告し、それらの修正を支援します。
コンテンツを作成した後にスティッキーリンクを有効にした場合、その既存のコンテンツ内のリンクはすぐにはスティッキーリンクに変換されません。
スティッキーリンクの管理画面には、通常の(スティッキーではない)リンクが含まれている可能性のあるコンテンツの数が表示されます。WPMLはそのコンテンツをスキャンし、すべてのリンクをスティッキーリンクに変換できます。これを行うには、スキャンボタンをクリックします。
スティッキーURLをパーマリンクに戻すをクリックすることで、いつでもリンクを通常の(スティッキーではない)パーマリンクに戻すことができます。
別の言語のページへのリンク
別の言語のページへのリンクを挿入したい場合があります。スティッキーリンクはリンクを自動的に調整するため、これが妨げられ、代わりに同じ言語を指すようにリンクが調整されることがあります。
他の言語のページへのリンクを追加できるようにするには、テーマのfunctions.phpファイルに以下のフィルターを追加する必要があります。
他の言語のページへのリンクを許可する
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」(スラッグは「documentation」)および「Page Builders」(スラッグは「page-builders」)ページにリンクするため、以下の2行を使用します。
リンクを許可するURLリストの指定例
$blacklist[] = 'documentation'; $blacklist[] = 'page-builders';
ショートコードコンテンツ内のリンクの処理
デフォルトでは、スティッキーリンクプラグインはショートコードによって生成されたリンクを検索しません。
ページ内に「?page_id=XX」のようなリンクを生成するショートコードがある場合、それはパーマリンクに変換されずにユーザーに表示されます。
これらのショートコードコンテンツをスティッキーリンクで処理するには、functions.phpファイルにこのスニペットを追加します。
ショートコードコンテンツ内のリンクを処理する
if ( class_exists( 'WPML_Sticky_Links' ) ) {
global $WPML_Sticky_Links;
add_filter( 'do_shortcode_tag', [ $WPML_Sticky_Links, 'show_permalinks' ], 0 );
}
