从Wordpress CustomPosttype永久链接

时间:2017-04-18 10:47:27

标签: php wordpress permalinks

我想从Wordpress中的自定义帖子类型永久链接中删除所有连字符/破折号。

例如:

www.website.com/customposttype/的后名称 /

成为:

www.website.com/customposttype/的 postname /

我希望自动解决未来和旧帖子。

有关如何使用任何功能执行此操作的任何建议。

由于

2 个答案:

答案 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;

Demo

答案 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 );