📅  最后修改于: 2023-12-03 14:40:15.113000             🧑  作者: Mango
在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_link
,rewrite_rules_array
和 query_vars
来修改CPT的链接结构。
请注意,您需要将代码中的 'your_cpt_slug'
替换为您实际使用的CPT的slug。此外,确保将代码添加到您的主题的 functions.php
文件中。
这样修改链接结构后,您可以使用新的链接结构来访问和显示CPT的文章。请务必根据自己的需求进行适当的修改和调整。