从 Wordpress CustomPosttype 永久链接中删除 Dash/Hyphen
Remove Dash/Hyphen From Wordpress CustomPosttype Permalink
我想从 Wordpress 中的自定义 post 类型永久链接中删除所有 hyphens/dashes。
例如:
www.website.com/customposttype/post-姓名/
变成:
www.website.com/customposttype/post姓名/
我想要未来和旧 posts 的自动解决方案。
有关如何使用任何函数执行此操作的任何建议。
谢谢
警告、破折号和连字符只能在 utl 路径中删除,不能在域中删除。
这就是为什么我会做这样的事情:
像这样:
// This is our sample url, I just add a hyphen in domain name to ensure it won't be replaced
$url = "http://www.my-website.com/customposttype/post-name/foo_bar/";
// We use native php url parser to extract url path
$parsed_url = parse_url($url);
$url_path = $parsed_url["path"];
// Then, we replace dashes and hyphens in this path using a simple regular expression
$url_path = preg_replace('/(-|_)/', '', $url_path);
// Finally we rebuild a new url from the original one by replacing the path with the new one
$new_url = $parsed_url["scheme"].$parsed_url["host"].$url_path;
您需要使用挂钩到 WordPress 的清理标题挂钩。
function no_dashes($title) {
return str_replace('-', '', $title);
}
add_filter('sanitize_title', 'no_dashes' , 9999);
它将删除 URL 中的破折号。但是,只有当您保存 post 时它才会起作用。那是对于新的 posts 它会工作得很好。但是对于现有的 post,您必须去 edit/hit update/save 才能实现。
TODO:您还需要检查自定义 Post 类型,因此它不适用于所有 post 类型。
更新:我认为添加 post_type 检查会更容易,因此我在上面添加了 TODO,但你是对的,看起来我们没有任何与我使用的过滤器挂钩相关的数据。
为此,请使用此代码,看看它是否有效:
function no_dashes( $slug, $post_ID, $post_status, $post_type ) {
if( $post_type == "page" ) {
$slug = str_replace( '-', '', $slug);
}
return $slug;
}
add_filter( "wp_unique_post_slug", "no_dashes", 10, 4 );
我想从 Wordpress 中的自定义 post 类型永久链接中删除所有 hyphens/dashes。
例如:
www.website.com/customposttype/post-姓名/
变成:
www.website.com/customposttype/post姓名/
我想要未来和旧 posts 的自动解决方案。
有关如何使用任何函数执行此操作的任何建议。
谢谢
警告、破折号和连字符只能在 utl 路径中删除,不能在域中删除。 这就是为什么我会做这样的事情:
像这样:
// This is our sample url, I just add a hyphen in domain name to ensure it won't be replaced
$url = "http://www.my-website.com/customposttype/post-name/foo_bar/";
// We use native php url parser to extract url path
$parsed_url = parse_url($url);
$url_path = $parsed_url["path"];
// Then, we replace dashes and hyphens in this path using a simple regular expression
$url_path = preg_replace('/(-|_)/', '', $url_path);
// Finally we rebuild a new url from the original one by replacing the path with the new one
$new_url = $parsed_url["scheme"].$parsed_url["host"].$url_path;
您需要使用挂钩到 WordPress 的清理标题挂钩。
function no_dashes($title) {
return str_replace('-', '', $title);
}
add_filter('sanitize_title', 'no_dashes' , 9999);
它将删除 URL 中的破折号。但是,只有当您保存 post 时它才会起作用。那是对于新的 posts 它会工作得很好。但是对于现有的 post,您必须去 edit/hit update/save 才能实现。
TODO:您还需要检查自定义 Post 类型,因此它不适用于所有 post 类型。
更新:我认为添加 post_type 检查会更容易,因此我在上面添加了 TODO,但你是对的,看起来我们没有任何与我使用的过滤器挂钩相关的数据。
为此,请使用此代码,看看它是否有效:
function no_dashes( $slug, $post_ID, $post_status, $post_type ) {
if( $post_type == "page" ) {
$slug = str_replace( '-', '', $slug);
}
return $slug;
}
add_filter( "wp_unique_post_slug", "no_dashes", 10, 4 );