前言
get_permalink() 是取得文章/頁面規範連結的標準函數;wp_title() 是輸出網頁 <title> 標籤內容的核心函數。本文完整解析參數、回傳值、實戰範例、SEO 優化技巧與常見誤區。
get_permalink() — 取得文章/頁面永久連結
函數原型
get_permalink( $post = 0, $leavename = false )
參數說明
| 參數 | 型別 | 預設 | 說明 |
| $post | int|WP_Post | 0 (當前迴圈文章) | 文章 ID 或 WP_Post 物件 |
| $leavename | bool | false | true 保留 %postname% 結構標記,不解析為實際 slug |
回傳值
- 成功:完整永久連結 (string)
- 失敗:
false (如文章不存在、狀態非發布)
常用範例
// 1. 迴圈中取得當前文章連結
echo get_permalink();
// 2. 依 ID 取得指定文章連結
echo '閱讀全文';
// 3. 依頁面標題取得頁面連結
$page = get_page_by_title('聯絡我們');
if ($page) {
echo '聯絡我們';
}
// 4. 保留結構標記 (用於 JS 路由或重寫規則測試)
echo get_permalink(123, true); // 輸出: https://example.com/%postname%/
進階:取得自訂文章類型連結
// 產品頁面
$product = get_post(456);
if ($product && $product->post_type === 'product') {
echo get_permalink($product);
}
// 使用 get_post_type_archive_link() 取得封存頁
echo get_post_type_archive_link('product');
wp_title() — 輸出/取得網頁標題
函數原型
wp_title( $sep = '»', $display = true, $seplocation = '' )
參數說明
| 參數 | 型別 | 預設 | 說明 |
| $sep | string | » (») | 分隔符號,建議用 '|' 或 '-' |
| $display | bool | true | true 直接 echo,false 回傳字串 |
| $seplocation | string | '' | 'right' 分隔符在右側 (較符合 SEO),其他值在左側 |
各頁面預設輸出內容
| 頁面類型 | 預設標題內容 |
| 單篇文章 | 文章標題 |
| 單一頁面 | 頁面標題 |
| 分類封存 | 分類名稱 |
| 標籤封存 | 標籤名稱 |
| 日期封存 | 年/月/日 |
| 作者封存 | 作者顯示名稱 |
| 搜尋結果 | 搜尋關鍵字 |
| 404 頁面 | Page not found |
| 首頁 (非靜態首頁) | 最新文章標題 |
基本用法 (header.php)
// 輸出範例: 文章標題 | 網站名稱
SEO 優化:使用 wp_title filter 自定義標題結構
現代最佳實務:title-tag 主題支援 (WP 4.1+)
// functions.php
add_theme_support('title-tag');
// WordPress 自動輸出 ,可透過 filter 修改
add_filter('document_title_parts', function($parts) {
// $parts 陣列包含: title, site, tagline, page, separator
// 範例:首頁只顯示網站名稱
if (is_front_page()) {
unset($parts['tagline']);
$parts['title'] = $parts['site'];
}
return $parts;
});
// 修改分隔符
add_filter('document_title_separator', function() {
return '|';
});
舊版相容:wp_title filter
add_filter('wp_title', function($title, $sep, $seplocation) {
global $page, $paged;
// 添加分頁號
if ($paged >= 2 || $page >= 2) {
$title .= " $sep " . sprintf(__('第 %s 頁'), max($paged, $page));
}
// 首頁添加網站名稱與描述
if (is_front_page()) {
$title = get_bloginfo('name') . $sep . get_bloginfo('description');
}
return $title;
}, 10, 3);
常見誤區與最佳實務
| 誤區 | 正確做法 |
| 在 header.php 寫死 <title>網站名稱</title> | 使用 wp_title() 或 title-tag 主題支援 |
| wp_title() 未設定 seplocation='right' | 加上 'right' 讓網站名稱在右側 (SEO 較佳) |
| get_permalink() 未用 esc_url() 輸出 | 永遠 esc_url() 後再輸出到 HTML 屬性 |
| 在迴圈外用 get_permalink() 不傳 ID | 明確傳入 ID 或 WP_Post 物件 |
| 自訂文章類型單頁標題異常 | 確認 post_type 支援 title-tag 或自行 filter 修正 |
原始碼位置
get_permalink():wp-includes/link-template.php
wp_title():wp-includes/general-template.php
小結
get_permalink() 是取得文章連結的唯一標準入口,配合 esc_url() 確保輸出安全。wp_title() 雖為舊函數,但透過 document_title_parts filter (WP 4.1+) 可實現完整 SEO 標題控制。現代主題建議宣告 add_theme_support('title-tag'),讓核心自動管理 <title>,開發者專注於 filter 修改標題結構即可。