在WordPress中,即使你配置了固定链接,系统默认的参数化链接仍然有效。以下是获取各类内容默认参数访问链接的方法:
不含分页的解决方法
多次检测修正后的函数
/**
* 获取系统默认参数化访问链接
*
* @param int|null $id 内容ID (文章/分类/标签等)
* @param string $type 内容类型 ('post', 'term')
* @param string $taxonomy 分类法名称 (当$type='term'时必填)
* @return string 默认参数化URL
*/
function zzw_get_default_param_link($id = null, $type = 'post', $taxonomy = '') {
$url = home_url('/');
// 自动获取当前对象ID
if (null === $id) {
if (is_singular()) {
$id = get_the_ID();
} elseif (is_tax() || is_category() || is_tag()) {
$id = get_queried_object_id();
}
}
if (!$id) return $url;
switch ($type) {
case 'post':
$post = get_post($id);
if (!$post) return $url;
if ('page' === $post->post_type) {
return add_query_arg('page_id', $id, $url);
}
// 处理自定义文章类型
elseif ('post' !== $post->post_type) {
return add_query_arg([
'post_type' => $post->post_type,
'p' => $id
], $url);
}
// 默认文章类型
else {
return add_query_arg('p', $id, $url);
}
case 'term':
$term = get_term($id, $taxonomy);
if (!$term || is_wp_error($term)) return $url;
// 分类目录
if ('category' === $taxonomy) {
return add_query_arg('cat', $id, $url);
}
// 文章标签
elseif ('post_tag' === $taxonomy) {
return add_query_arg('tag', $term->slug, $url);
}
// 自定义分类法 - 修正后的正确结构
else {
return add_query_arg($taxonomy, $term->slug, $url);
}
default:
return $url;
}
}各类内容正确结构说明:
| 内容类型 | 正确默认参数化结构 | 示例 |
|---|---|---|
| 普通文章 | ?p=123 | /?p=42 |
| 页面 | ?page_id=456 | /?page_id=15 |
| 自定义文章类型 | ?post_type=cpt&p=789 | /?post_type=product&p=78 |
| 分类目录 | ?cat=12 | /?cat=5 |
| 文章标签 | ?tag=slug | /?tag=technology |
| 自定义分类法 | ?taxonomy=slug | /?genre=sci-fi |
使用示例:
// 1. 自定义分类法项 (如 'genre' 分类法)
$term_link = zzw_get_default_param_link(
$term_id,
'term',
'genre' // 分类法名称
);
// 输出: /?genre=sci-fi
// 2. 自定义文章类型单篇 (如 'movie')
$cpt_link = zzw_get_default_param_link($post_id);
// 输出: /?post_type=movie&p=123
// 3. 分类目录
$cat_link = zzw_get_default_param_link(5, 'term', 'category');
// 输出: /?cat=5
// 4. 文章标签
$tag_link = zzw_get_default_param_link($tag_id, 'term', 'post_tag');
// 输出: /?tag=technology在模板中的使用示例:
// 在分类法归档页获取当前项的默认链接
if (is_tax()) {
$term = get_queried_object();
$default_link = zzw_get_default_param_link(
$term->term_id,
'term',
$term->taxonomy
);
echo '<a href="'.esc_url($default_link).'">Default URL</a>';
}
// 在单篇文章中获取默认链接
if (is_single()) {
$default_link = zzw_get_default_param_link();
echo '<a href="'.esc_url($default_link).'">Default URL</a>';
}注意事项:
- 分类法名称必须与注册时完全一致
- 标签使用 slug 而非 ID
- 分类目录使用 ID 而非 slug
- 确保保留您的重定向禁用代码:
add_filter('redirect_canonical', function($redirect) {
return false;
});这个版本完全遵循 WordPress 的核心查询参数规范,特别是正确处理了自定义分类法的默认链接结构。
含分页且将文章和分类分别独立函数
将原函数拆分为两个专用函数:一个用于文章/页面/自定义文章类型,另一个用于分类/标签/自定义分类法。同时,我会添加分页支持并创建直观的界面来展示这些功能。
优化后的函数实现
/**
* 获取文章/页面的默认参数化访问链接(含分页支持)
*
* @param int|null $id 文章/页面ID
* @param int $page 分页页码 (文章分页使用)
* @return string 默认参数化URL
*/
function zzw_get_default_post_param_link($id = null, $page = 1) {
$url = home_url('/');
// 自动获取当前对象ID
if (null === $id && is_singular()) {
$id = get_the_ID();
}
if (!$id) return $url;
$post = get_post($id);
if (!$post) return $url;
// 处理页面
if ('page' === $post->post_type) {
$url = add_query_arg('page_id', $id, $url);
// 页面分页
if ($page > 1) {
$url = add_query_arg('page', $page, $url);
}
return $url;
}
// 处理自定义文章类型
if ('post' !== $post->post_type) {
$url = add_query_arg([
'post_type' => $post->post_type,
'p' => $id
], $url);
// 自定义文章类型分页
if ($page > 1) {
$url = add_query_arg('page', $page, $url);
}
return $url;
}
// 默认文章类型
$url = add_query_arg('p', $id, $url);
// 文章分页
if ($page > 1) {
$url = add_query_arg('page', $page, $url);
}
return $url;
}
/**
* 获取分类/标签/自定义分类法的默认参数化访问链接(含分页支持)
*
* @param int|null $id 分类/标签ID
* @param string $taxonomy 分类法名称
* @param int $page 分页页码 (归档分页使用)
* @return string 默认参数化URL
*/
function zzw_get_default_term_param_link($id = null, $taxonomy = '', $page = 1) {
$url = home_url('/');
// 自动获取当前对象ID
if (null === $id && (is_tax() || is_category() || is_tag())) {
$id = get_queried_object_id();
}
if (!$id || !$taxonomy) return $url;
$term = get_term($id, $taxonomy);
if (!$term || is_wp_error($term)) return $url;
// 分类目录
if ('category' === $taxonomy) {
$url = add_query_arg('cat', $id, $url);
}
// 文章标签
elseif ('post_tag' === $taxonomy) {
$url = add_query_arg('tag', $term->slug, $url);
}
// 自定义分类法
else {
$url = add_query_arg($taxonomy, $term->slug, $url);
}
// 归档分页
if ($page > 1) {
$url = add_query_arg('paged', $page, $url);
}
return $url;
}
// 禁用规范重定向以支持两种URL格式
add_filter('redirect_canonical', function($redirect) {
return false;
});使用示例
// 1. 普通文章(带分页)
$post_link = zzw_get_default_post_param_link(42, 2);
// 输出: /?p=42&page=2
// 2. 页面(带分页)
$page_link = zzw_get_default_post_param_link(15, 3);
// 输出: /?page_id=15&page=3
// 3. 自定义文章类型(如 'product')
$cpt_link = zzw_get_default_post_param_link(78);
// 输出: /?post_type=product&p=78
// 4. 分类目录(带分页)
$cat_link = zzw_get_default_term_param_link(5, 'category', 2);
// 输出: /?cat=5&paged=2
// 5. 文章标签
$tag_link = zzw_get_default_term_param_link(9, 'post_tag');
// 输出: /?tag=technology
// 6. 自定义分类法(如 'genre')
$custom_tax_link = zzw_get_default_term_param_link(12, 'genre', 3);
// 输出: /?genre=sci-fi&paged=3功能对比界面
下面是展示两个函数功能对比的HTML界面:
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>WordPress 默认参数链接生成器</title>
<style>
:root {
--primary: #21759b;
--primary-light: #d9edf7;
--secondary: #464646;
--light: #f5f5f5;
--border: #ddd;
--success: #4caf50;
--post-color: #4a86e8;
--term-color: #6aa84f;
}
* {
box-sizing: border-box;
margin: 0;
padding: 0;
}
body {
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif;
line-height: 1.6;
color: var(--secondary);
background-color: #f1f1f1;
padding: 20px;
}
.container {
max-width: 1200px;
margin: 0 auto;
}
header {
background: var(--primary);
color: white;
padding: 25px 30px;
border-radius: 8px 8px 0 0;
margin-bottom: 20px;
}
h1 {
font-size: 28px;
margin-bottom: 5px;
}
.subtitle {
opacity: 0.9;
font-size: 16px;
}
.content {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 20px;
margin-bottom: 30px;
}
@media (max-width: 768px) {
.content {
grid-template-columns: 1fr;
}
}
.card {
background: white;
border: 1px solid var(--border);
border-radius: 8px;
padding: 25px;
box-shadow: 0 2px 10px rgba(0,0,0,0.05);
height: 100%;
}
.post-card {
border-top: 4px solid var(--post-color);
}
.term-card {
border-top: 4px solid var(--term-color);
}
h2 {
font-size: 22px;
margin-bottom: 20px;
padding-bottom: 15px;
border-bottom: 1px solid var(--border);
}
.post-card h2 {
color: var(--post-color);
}
.term-card h2 {
color: var(--term-color);
}
.function-header {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 15px;
}
.function-name {
font-family: monospace;
font-size: 18px;
background: var(--light);
padding: 8px 12px;
border-radius: 4px;
}
.params {
margin-bottom: 25px;
}
.param {
display: flex;
margin-bottom: 12px;
padding-bottom: 12px;
border-bottom: 1px dashed var(--border);
}
.param-name {
width: 120px;
font-weight: 500;
}
.param-desc {
flex: 1;
}
.examples {
background: var(--light);
border-radius: 6px;
padding: 20px;
margin-top: 25px;
}
h3 {
font-size: 18px;
margin-bottom: 15px;
color: var(--secondary);
}
.example {
margin-bottom: 15px;
padding: 15px;
background: white;
border-radius: 6px;
border-left: 3px solid var(--primary);
}
.example-header {
display: flex;
justify-content: space-between;
margin-bottom: 10px;
}
.example-title {
font-weight: 500;
}
.example-output {
font-family: monospace;
background: #f8f9fa;
padding: 12px;
border-radius: 4px;
border: 1px solid #eaecef;
word-break: break-all;
}
.usage {
margin-top: 30px;
background: var(--primary-light);
border-left: 4px solid var(--primary);
padding: 20px;
border-radius: 0 6px 6px 0;
}
.usage h3 {
color: var(--primary);
}
.code-block {
background: #2d2d2d;
color: #f8f8f2;
padding: 20px;
border-radius: 6px;
overflow-x: auto;
margin: 15px 0;
font-family: monospace;
font-size: 15px;
}
.footer {
text-align: center;
margin-top: 40px;
color: #777;
font-size: 14px;
}
</style>
</head>
<body>
<div class="container">
<header>
<h1>WordPress 默认参数链接生成器</h1>
<p class="subtitle">优化版函数 - 支持文章/页面和分类/标签分离处理</p>
</header>
<div class="content">
<div class="card post-card">
<h2>文章/页面链接生成</h2>
<div class="function-header">
<div class="function-name">zzw_get_default_post_param_link()</div>
</div>
<div class="params">
<h3>参数说明</h3>
<div class="param">
<div class="param-name">$id</div>
<div class="param-desc">文章/页面ID (可选,默认为当前文章)</div>
</div>
<div class="param">
<div class="param-name">$page</div>
<div class="param-desc">分页页码 (文章内分页使用)</div>
</div>
</div>
<div class="examples">
<h3>使用示例</h3>
<div class="example">
<div class="example-header">
<div class="example-title">普通文章</div>
</div>
<div class="example-code">
<div class="code">zzw_get_default_post_param_link(42);</div>
<div class="example-output">/?p=42</div>
</div>
</div>
<div class="example">
<div class="example-header">
<div class="example-title">带分页的文章</div>
</div>
<div class="example-code">
<div class="code">zzw_get_default_post_param_link(42, 3);</div>
<div class="example-output">/?p=42&page=3</div>
</div>
</div>
<div class="example">
<div class="example-header">
<div class="example-title">页面</div>
</div>
<div class="example-code">
<div class="code">zzw_get_default_post_param_link(15);</div>
<div class="example-output">/?page_id=15</div>
</div>
</div>
<div class="example">
<div class="example-header">
<div class="example-title">自定义文章类型</div>
</div>
<div class="example-code">
<div class="code">zzw_get_default_post_param_link(78);</div>
<div class="example-output">/?post_type=product&p=78</div>
</div>
</div>
</div>
</div>
<div class="card term-card">
<h2>分类/标签链接生成</h2>
<div class="function-header">
<div class="function-name">zzw_get_default_term_param_link()</div>
</div>
<div class="params">
<h3>参数说明</h3>
<div class="param">
<div class="param-name">$id</div>
<div class="param-desc">分类/标签ID (可选,默认为当前分类)</div>
</div>
<div class="param">
<div class="param-name">$taxonomy</div>
<div class="param-desc">分类法名称 (必填)</div>
</div>
<div class="param">
<div class="param-name">$page</div>
<div class="param-desc">分页页码 (归档分页使用)</div>
</div>
</div>
<div class="examples">
<h3>使用示例</h3>
<div class="example">
<div class="example-header">
<div class="example-title">分类目录</div>
</div>
<div class="example-code">
<div class="code">zzw_get_default_term_param_link(5, 'category');</div>
<div class="example-output">/?cat=5</div>
</div>
</div>
<div class="example">
<div class="example-header">
<div class="example-title">带分页的分类</div>
</div>
<div class="example-code">
<div class="code">zzw_get_default_term_param_link(5, 'category', 2);</div>
<div class="example-output">/?cat=5&paged=2</div>
</div>
</div>
<div class="example">
<div class="example-header">
<div class="example-title">文章标签</div>
</div>
<div class="example-code">
<div class="code">zzw_get_default_term_param_link(9, 'post_tag');</div>
<div class="example-output">/?tag=technology</div>
</div>
</div>
<div class="example">
<div class="example-header">
<div class="example-title">自定义分类法</div>
</div>
<div class="example-code">
<div class="code">zzw_get_default_term_param_link(12, 'genre', 3);</div>
<div class="example-output">/?genre=sci-fi&paged=3</div>
</div>
</div>
</div>
</div>
</div>
<div class="usage">
<h3>使用说明 & 注意事项</h3>
<p>1. 这两个函数需要添加到主题的 <code>functions.php</code> 文件中</p>
<p>2. 确保禁用规范重定向,以支持两种URL格式共存:</p>
<div class="code-block">
add_filter('redirect_canonical', function($redirect) {
return false;
});
</div>
<p>3. 分页参数说明:</p>
<ul>
<li><strong>文章分页</strong>:使用 <code>page</code> 参数 (如 <code>?p=42&page=2</code>)</li>
<li><strong>归档分页</strong>:使用 <code>paged</code> 参数 (如 <code>?cat=5&paged=2</code>)</li>
</ul>
<p>4. 在模板中使用示例:</p>
<div class="code-block">
// 获取当前文章默认链接
$post_link = zzw_get_default_post_param_link();
// 获取当前分类默认链接(带分页)
$term_link = zzw_get_default_term_param_link(
get_queried_object_id(),
get_queried_object()->taxonomy,
(get_query_var('paged') ?: 1)
);
// 输出备用链接
echo '<a href="' . esc_url($post_link) . '">Default Post URL</a>';
echo '<a href="' . esc_url($term_link) . '">Default Term URL</a>';
</div>
</div>
<div class="footer">
<p>WordPress 默认参数链接生成器 © 2023 | 优化版函数支持所有内容类型和分页场景</p>
</div>
</div>
</body>
</html>函数设计亮点
- 清晰的职责分离:
zzw_get_default_post_param_link()专门处理文章/页面/自定义文章类型zzw_get_default_term_param_link()专门处理分类/标签/自定义分类法
- 完善的分页支持:
- 文章分页使用
page参数 - 归档分页使用
paged参数 - 自动处理页码逻辑(第一页不添加参数)
- 智能ID获取:
- 当不提供ID时,自动获取当前上下文对象的ID
- 支持手动指定ID的精确控制
- 错误处理:
- 验证文章/分类是否存在
- 无效输入返回首页URL
- 上下文感知:
- 在文章页自动获取当前文章ID
- 在分类页自动获取当前分类ID
使用场景对比
| 场景 | 使用函数 | 示例调用 |
|---|---|---|
| 普通文章 | | |
| 分页文章 | | |
| 页面 | | |
| 自定义文章 | | zzw_get_default_post_param_link(78) |
| 分类目录 | | |
| 分页分类 | | |
| 文章标签 | | |
| 自定义分类 | | |
这个优化方案提供了更清晰、更专注的函数设计,同时添加了分页支持,使您的WordPress网站能够完美处理所有类型的默认参数链接需求。

