📜  cpt 更改链接 - PHP (1)

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

CPT (Custom Post Types) 更改链接 - PHP

在WordPress中,CPT(自定义文章类型)允许开发人员创建和管理与常规文章和页面不同的自定义文章类型。每个CPT都可以在WordPress后台具有自己的编辑器,并具有其唯一的链接。

在某些情况下,您可能需要更改CPT的链接结构或重新命名特定CPT的链接。下面的PHP代码片段将帮助您实现这一目标。

/**
* 更改CPT的链接结构
*
* @param string $permalink    原始链接结构
* @param object $post         文章对象
* @param bool   $leavename    是否保留名称(默认为true)
*
* @return string  更改后的链接结构
*/
function custom_cpt_permalink($permalink, $post, $leavename = true) {
    // 获取当前CPT的slug
    $cpt_slug = 'your_cpt_slug';

    if (strpos($permalink, $cpt_slug) === false || empty($post->post_name)) {
        return $permalink;
    }

    // 获取文章的父级(如果有)
    $parent = '';
    if ($post->post_parent) {
        $parent = get_post($post->post_parent);
        $permalink = str_replace('%'.$cpt_slug.'%', $parent->post_name, $permalink);
    }

    // 替换文章的slug
    $permalink = str_replace('%'.$cpt_slug.'%', $post->post_name, $permalink);

    return $permalink;
}
// 使用自定义函数更改CPT的链接结构
add_filter('post_type_link', 'custom_cpt_permalink', 10, 3);


/**
* 更改自定义文章类型的请求重写规则
*
* @param object $rules     已注册的重写规则
* @return object           更新后的重写规则
*/
function custom_cpt_rewrite_rules($rules) {
    $cpt_slug = 'your_cpt_slug';
    
    // 添加给定的CPT slug到rules中
    $new_rules = array(
        $cpt_slug.'/?$' => 'index.php?post_type='.$cpt_slug,
        $cpt_slug.'/page/?([0-9]{1,})/?$' => 'index.php?post_type='.$cpt_slug.'&paged=$matches[1]'
    );
    
    return $new_rules + $rules;
}
// 使用自定义函数更新CPT的请求重写规则
add_filter('rewrite_rules_array', 'custom_cpt_rewrite_rules');


/**
* 设置自定义文章类型的新链接结构
*
* @param array $query_vars  已注册的查询变量
* @return array             更新后的查询变量
*/
function custom_cpt_link_query_vars($query_vars) {
    $cpt_slug = 'your_cpt_slug';
    
    // 添加自定义CPT slug到query_vars中
    $query_vars[] = $cpt_slug;
    return $query_vars;
}
// 使用自定义函数设置CPT的新链接结构
add_filter('query_vars', 'custom_cpt_link_query_vars');

以上代码片段使用了WordPress的过滤器 post_type_linkrewrite_rules_arrayquery_vars 来修改CPT的链接结构。

请注意,您需要将代码中的 'your_cpt_slug' 替换为您实际使用的CPT的slug。此外,确保将代码添加到您的主题的 functions.php 文件中。

这样修改链接结构后,您可以使用新的链接结构来访问和显示CPT的文章。请务必根据自己的需求进行适当的修改和调整。