从 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;

Demo

您需要使用挂钩到 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 );