📜  cpt url 重写 - PHP (1)

📅  最后修改于: 2023-12-03 15:14:16.648000             🧑  作者: Mango

CPT URL 重写 - PHP

本文将介绍如何使用 PHP 对 CPT(自定义文章类型)的 URL 进行重写。CPT 的 URL 重写可以更加美观和有意义,也可以为 SEO 带来好处。

准备工作

在开始之前,你需要先创建一个 CPT。可以在 functions.php 文件中添加以下代码:

function create_custom_post_type() {
    register_post_type('custom_post_type',
        array(
            'labels' => array(
                'name' => 'Custom Post Type',
                'singular_name' => 'Custom Post Type'
            ),
            'public' => true,
            'has_archive' => true,
            'rewrite' => array('slug' => 'custom-post-type'),
        )
    );
}
add_action('init', 'create_custom_post_type');

以上代码将创建一个名为 'Custom Post Type' 的 CPT,并将其 slug 设置为 'custom-post-type'

URL 重写

我们可以使用以下代码对 CPT 的 URL 进行重写:

function custom_post_type_permalink($post_link, $post) {
    if (get_post_type($post) === 'custom_post_type') {
        $terms = wp_get_object_terms($post->ID, 'category');
        if ($terms) {
            return str_replace('%category%', $terms[0]->slug, $post_link);
        }
    }
    return $post_link;
}
add_filter('post_type_link', 'custom_post_type_permalink', 1, 2);

以上代码使用了 post_type_link 过滤器,这个过滤器用于修改 CPT 的 URL。在过滤器中,我们首先判断该文章是否为 'custom_post_type'。之后,我们获取该文章所属分类的 slug,并将其替换为 URL 中的 %category%

最后,我们需要刷新 permalink,并在 functions.php 文件中添加以下代码:

function custom_flush_rewrite_rules() {
    flush_rewrite_rules();
}
add_action('init', 'custom_flush_rewrite_rules');

以上代码将在每次刷新页面时刷新 permalink。

测试

现在,我们可以在文章详情页面中看到 URL 已被重写。尝试试着创建一个属于 'custom-post-type' 的文章,并将其添加到某个分类中,查看其 URL 是否已被正确重写。

结论

对 CPT 进行 URL 重写可以让我们更好的控制文章 URL 的样式,更加美观和有意义。同时,这也为 SEO 带来了好处。