从WordPress 2.3.0开始,redirect_guess_404_permalink()功能就可以根据可用的查询变量尝试猜测所需的网址。当文章的父级7 m ] x更改(对于+ v K分层文章类型)或文章的slug别名更改时,此功能特别有用。

换句话说,如果用户访问的网址不存在,WordPress会. U R相对智能地寻找比较接M _ + r 1近用户请求的网址,而不是直接e F u j a & 0返回404错误页面,这样有利于提高s . G x 8 K用户体验。
对于M p $ q大多数WordPr2 C $ { * e 6ess网站而言,这种做法是很好的,D r * Z但是站长、开F } d发人员可能希望对猜测逻辑进行更精细的控制。这个功能请求在9年前就提交了,而WorJ % y ) !dPress 5.5就可以实现了。
短路默认猜测逻辑
从WordPress 5.5开始,可使用新的pre_redirect_guess_404_permalink 过滤钩子绕过默认的猜测逻辑来使功能短路(Short-circuiting)。这` t $ $ # 8对于执行自定义逻辑Q 0 { & B非! # H q常有用,该自定义逻辑可以更好地满足每个站点的需求,从而做出更准确的猜测。
向过滤器返回非假(non-false)值将使函数尽早返回过滤后的值。
例子
function mysite_pre_redirect_guess_404_permalink() {
// Custom redirect URL guessing( ` ] : } logic.
return $new_redirect_url;
}
add_filter( ‘pre_redirect_guess_404_permalink’, ‘mysite_pre_redirect_guess_404_perm( \ Ral) _ 1 0 gink’ );
控制“严格”与“宽松E 8 Q p l c”P F j比较
可以使用strict_redi4 * g hrec– m . @ ] P Z Yt_guess_[ t W X G i # 5 U404_; F – Gpermalink钩子来设置使用“严格”还是“宽松”比较规则。
当钩子返回值为true,为“严格”规则,仅当post_name找到完全匹配的内容时,才会执行重定向的猜测建议。
当钩{ e [ E o M 2 i –子返回值为false,为“宽松”规则,这U G x – g m X个是默认选项,将在post_name上执行LIKE查询。
例子
以下示例将. l !在redirect_guess_404_permalink()中启用“严格”比较:
add_filter( ‘2 D Rstrict_redirect_guess_404_permalink’, ‘__return_true’ );
禁用404重定向猜测
通5 a \ w b过do_redir) Q T 9ect_guess_404_permalink过滤器返回fali @ U ( a ` 9se,可以完全禁用重定向猜测。
例如
add_filter( ‘do_redirect_guess_404_permalink’, ‘__return_false’ );

