はい、同じように一致させる必要があるのは奇妙に見えます。
example.tld/2016/03/29/test/
そして例えば
example.tld/2016/03/29/..!!$$~~test~~!!$$../
なぜこれが可能であるかは、メソッドのこの部分のようWP_Query::get_posts()
です:
if ( '' != $q['name'] ) {
$q['name'] = sanitize_title_for_query( $q['name'] );
場所sanitize_title_for_query()
:のように定義されます
function sanitize_title_for_query( $title ) {
return sanitize_title( $title, '', 'query' );
}
sanitize_title
フィルターを使用してこれをより厳密にすることは可能ですsanitize_title_with_dashes
が、ここでの衛生管理を担当するに基づいて、デフォルトの出力をオーバーライドすることはお勧めできません 。この動作に関する最新情報がまだない場合は、チケットを変更する代わりに作成することを検討してください。
更新
現在のパスからノイズをクリーンアップして、sanitize_title_for_query()
必要に応じてクリーンアップされたURLにリダイレクトできるかどうか疑問に思いますか?
テストサイトで遊んで、ニーズに合わせて調整できるデモを次に示します。
/**
* DEMO: Remove noise from url and redirect to the cleaned version if needed
*/
add_action( 'init', function( )
{
// Only for the front-end
if( is_admin() )
return;
// Get current url
$url = home_url( add_query_arg( [] ) );
// Let's clean the current path with sanitize_title_for_query()
$parse = parse_url( $url );
$parts = explode( '/', $parse['path'] );
$parts = array_map( 'sanitize_title_for_query', $parts );
$path_clean = join( '/', $parts );
$url_clean = home_url( $path_clean );
if( ! empty( $parse['query'] ) )
$url_clean .= '?' . $parse['query'];
// Only redirect if the current url is noisy
if( $url === $url_clean )
return;
wp_safe_redirect( esc_url_raw( $url_clean ) );
exit;
} );
sanitize_title_with_dashes()
フィルターを回避して置き換えるには、直接使用する方がよい場合もあります。
$parts = array_map( 'sanitize_title_for_query', $parts );
で:
foreach( $parts as &$part )
{
$part = sanitize_title_with_dashes( $part, '', 'query' );
}
ps:add_query_arg( [] )
@gmazzapから現在のパスを空にするためのこのトリックを学んだと思います;-)これはコーデックスにも記載されています。@gmazzap esc_url()
の出力を表示するとき、add_query_arg( [] )
またはesc_url_raw()
リダイレクトするときなどに使用することを思い出させてくれてありがとう。以前のCodexリファレンスも確認してください。