我想从Wordpress中的自定义帖子类型永久链接中删除所有连字符/破折号。
例如:
www.website.com/customposttype/的后名称 /
成为:
www.website.com/customposttype/的 postname /
我希望自动解决未来和旧帖子。
有关如何使用任何功能执行此操作的任何建议。
由于
答案 0 :(得分:0)
警告,破折号和连字符只能在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;
答案 1 :(得分:0)
您需要使用挂钩到WordPress的清理标题钩。
function no_dashes($title) {
return str_replace('-', '', $title);
}
add_filter('sanitize_title', 'no_dashes' , 9999);
它将从URL中删除破折号。但是只有在保存帖子时它才会起作用。这是新的帖子,它将工作得很好。但对于现有帖子,您必须进行编辑/点击更新/保存才能实现。
TODO:您还需要检查自定义帖子类型,因此它不适用于所有帖子类型。
更新:我认为添加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 );