在未使用自定义帖子类型分配分类时删除分类插件

时间:2014-06-25 作者:timmyg

我创建了一个自定义帖子类型插件,当用户将帖子分配给分类法(在站点中称为“分类”)时,它会添加到url slug中。

所以基本上它呈现:站点。com/data/{分类}/{页面标题}

然而,当用户没有选择分类法时,我不知道如何从slug中删除分类法(classification)。我的代码如下:

function classification_permalink($permalink, $post_id, $leavename) {
    if (strpos($permalink, \'%classification%\') === FALSE) return $permalink;
        // Get post
        $post = get_post($post_id);
        if (!$post) return $permalink;

        // Get taxonomy terms
        $terms = wp_get_object_terms($post->ID, \'classification\');
        if (!is_wp_error($terms) && !empty($terms) && is_object($terms[0]))
            $taxonomy_slug = $terms[0]->slug;
        else $taxonomy_slug = \'no-classification\';

    return str_replace(\'%classification%\', $taxonomy_slug, $permalink);
显然else $taxonomy_slug = \'no-classification\'; 是未选择分类法时slug的默认值。

但是我该如何编辑这一行,以便在没有指定分类法的情况下,slug将恢复为根,这样它将显示:site。com/data/{页面标题}?

完整插件位于我的github上:https://github.com/tgelles/dr12-post-types

1 个回复
最合适的回答,由SO网友:Milo 整理而成

这个post_type_link 过滤器负责修改输出的永久链接,但它与解析这些永久链接的传入请求无关。因此,您需要修改函数以输出正确的链接,但也需要添加重写规则,以便WordPress知道在请求这些页面时要做什么。

这都是未经测试的,但在我的脑海中,您可以修改分类slug以添加尾部斜杠:

$taxonomy_slug = $terms[0]->slug . \'/\';
然后将“无分类”案例修改为空字符串:

else $taxonomy_slug = \'\';
然后替换分类标记和尾部斜杠:

return str_replace(\'%classification%/\', $taxonomy_slug, $permalink);
然后,要处理这些没有分类的请求,请在上添加另一个重写规则init:

add_rewrite_rule(
    \'data/([^/]+)/?$\',
    \'index.php?dr12-documentation=$matches[1]\',
    \'top\'
);

结束

相关推荐

Sanitize slug title

我需要将此字符串转换为帖子url:(带点和欧元符号的数字)例如:9000欧元->9000欧元我找到了此函数,但不起作用:add_filter( \'sanitize_title\', \'sanitize_title_extra\' ); function sanitize_title_extra( $title ) { $friendlyURL = htmlentities($title, ENT_COMPAT, \"UTF-8\", false); &