WordPressのスラグ生成フローを経由せずに、いくつかの文字列に対してスラグを生成したい。したがって、私はそれがきちんとしたスラグを取得するためにそれが呼び出す関数を知りたいです。 sanitize_title()を試しましたが、結果として%c2%a0のままになります。
あなたはもうすぐそこにいます。あなたが必要とする機能は sanitize_title_with_dashes($ title) です。
sanitize_title()
があなたが必要とする唯一のもののようです。
Wp-includes/default-filters.phpの211行目には、
add_filter( 'sanitize_title', 'sanitize_title_with_dashes', 10, 3);
つまり、sanitize_title()
を呼び出すと、最初にすべての特殊文字が削除され、次にsanitize_title
フィルタが適用され、sanitize_title_with_dashes()
が呼び出されます。
@JHoffmannが指摘したように、単にsanitize_title_with_dashes()
を呼び出しても特殊文字は削除されません。
まあ、答えはもうありますが、私はそれを少し広げたいと思ったので、ここに私の発見があります:
wp_insert_post()
を見れば、$post_name
はwp_sanitize_title()
を使用してサニタイズされます( wp-includes/post.php
を参照)
関数sanitize_title()
には、フィルタsanitize_title
があります。デフォルトのフィルタではsanitize_title_with_dashes()
がこのフィルタにフックされているのでこれは面白いです( wp-includes/default-filters.php
を見てください)。
<?php
echo sanitize_title( 'Â+ÄÖßáèäç' ) // aaeoessaeaec
?>
Sanitize_title()を試しましたが、結果として%c2%a0のままになります。
これは奇妙に聞こえます。入力値を知ることは素晴らしいことですが、wp_insert_post()
sanitize_title()
に従うことで十分であるように思われます。
Websupporterの素晴らしい answer に加えて、私は以下を見つけました:
使用法に応じて、必要なものに依存します。
sanitize_title()
のとおり:
アクセントが削除されます(アクセント記号付きの文字は、アクセント記号のない同等のものに置き換えられます)
...そしてsanitize_title_with_dashes
のコメント:
は特別なアクセント付き文字を置き換えないことに注意してください
したがって、このexample文字列ではÂ+Ä Ö %%% ßá %20 oo %pp + -_^^#@!**()=[]|\/\'"<>?``~ èäç
sanitize_title()
結果:
aa-o-sa-%20-oo-pp -_- eac
ご覧のように、replacedアクセント付き文字とそれに対応する非アクセント記号およびがすべて削除されています数字が後に続く%
以外の英数字以外の文字。ただし、文字の後に削除されたことがわかります。おそらく、これは すでにエンコードされている として認識しているためです。これは、%c3
が有効なエンコードシーケンスであるため、%c3
を文字列に挿入しようとすると強制されます。
sanitize_title_with_dashes
結果:
%c3%a2%c3%a4-%c3%b6-%c3%9f%c3%a1-%20-oo-pp -_-%c3%a8%c3%a4%c3%a7
ご覧のとおり、アクセント付き文字は削除されておらず、エンコードされています。
noアクセント付き文字を含む文字列を見て、両方の動作を確認しましょう...
文字列の例:%%% building %20 oo %pp + -_^^#@!**()=[]|\/\'"<>?``~'
sanitize_title()
結果:
building-%20-oo-pp-_
sanitize_title_with_dashes
結果:
building-%20-oo-pp-_
あなたが見ることができるように、それらは正確に同じです。したがって、それらの唯一の違いは、1つencodesがアクセント付きチャーターで、もう1つreplacesであるということです。