🐣 [php]WPでURLにドットを入れられるようにする
作成日: 2022/02/10
3

Wordpressではスラッグにドット(.)を入れると自動的にダッシュ(-)に変換される。
ドットを入れられるようにしたい、という要件があって調べて実装できたのでメモ。

最初に参考にしたもの↓

https://ja.wordpress.org/support/topic/タームのスラッグにドットを使う方法/
→ ドットを%2Eに変えてみても、保存すると変換されてだめでした。。

次に試したもの↓

https://stackoverflow.com/questions/41702633/all-dots-in-wordpress-permalink
→ これを丸っとコピペしたら、タイトルにドットを入れたらスラッグにもドットが入れられるようになった。でも、スラッグを直接触るとだめ。。

そもそものサイタイズの流れがどうなってるか調べてみる

$post_name = sanitize_title( $post_title );

sanitize_titleという関数が使われてタイトルをサニタイズしてる。

add_filter( 'sanitize_title', 'sanitize_title_with_dashes', 10, 3 );

default-filters.phpの中でさらに sanitize_title_with_dashes がフックされてる。
(sanitize_title_with_dashesが使われてるのはstackoverflowのコードでなんとなくわかった)

sanitize_title_with_dashesの中身

https://developer.wordpress.org/reference/functions/sanitize_title_with_dashes/

sanitize_title_with_dashesのカスタマイズ

sanitize_title_with_dashes の中でドットがダッシュに変換される記述を消したもの(custom版)をfunctions.phpに追加。
いじった箇所は下記の2箇所↓

$title = str_replace( '.', '-', $title ); // これを削除
$title = preg_replace( '/[^%a-z0-9 _-]/', '', $title ); // この箇所を'/[^%a-z0-9 ._-]/' に変更する(ドットも変換対象外とする)

元々の sanitize_title_with_dashes を sanitize_title からremoveして、カスタマイズしたものをフックする。

remove_filter( 'sanitize_title', 'sanitize_title_with_dashes', 10 );
add_filter( 'sanitize_title', 'custom_sanitize_title_with_dashes', 10, 3 );

で、できた〜!やった!


制作会社でフロントのコーディングやWordpressのテーマ開発をしてます。 本命はJavascriptです😋 目指せフロントエンドエンジニア👊