Physical Address

304 North Cardinal St.
Dorchester Center, MA 02124

在WordPress實現客家版本的多國語系網頁標題標籤titile

內容目錄

在WordPress實現客家版本的多國語系網頁標籤titile(建議不要用)

我透過TranslatePress實作了一個雙語言的網站專案,結果設定完SEO才想到,阿勒,那多國語系網頁標題標籤(SEO的meta)怎麼辦?
查了一下,TranslatePress很貼心的有做,但想當然要升級成專業版XDDD想了一下那就用hook硬幹吧。

補充

發現這方法不會移除原有的meta,導致會出現重複meta,因此改了另一種做法,新方式請見此篇

wp_head()

查了一下可以使用wp_head這個hook。

# wp-includes/general-template.php
function wp_head() {
    ...
    do_action( 'wp_head' );
}

從這邊可以看出WordPress中渲染網頁title標籤的是透過_wp_render_title_tag。

# wp-includes\default-filters.php
add_action( 'wp_head',             '_wp_render_title_tag',            1     );

再往下追就能看到_wp_render_title_tag回傳了標籤的內容。

# wp-includes/general-template.php
function _wp_render_title_tag() {
    ...
    echo '<title>' . wp_get_document_title() . '</title>' . "\n";
}

實作

因此可以使用add_filter()來覆蓋這個字串,顯示我想要的不同語言title。
設計思維:

  1. 取得URL中的slug
  2. 透過slug判斷現在的語言
  3. 取的頁面的原標題,跟我要的內容組合title
  4. 根據語言回傳不同的title

因為我這個專案的頁面很單純,都是page,所以省去了一些判斷。範例如下:

function custom_page_title($title) {
    global $wp;
    $url = home_url($wp->request);
    $slug = trim(parse_url($url, PHP_URL_PATH), '/');
    $posttitle = get_the_title();

    if($slug == 'zh_tw'){
        $title = '<title>' . $posttitle.' - 中文標題' . '</title>';
    }elseif($slug == 'en'){
        $title = '<title>' . $posttitle.' - Englishtitle' . '</title>';
    }else{
        $title = '<title>' . $posttitle.' - 中文標題' . '</title>';
    }
    echo $title;
}

add_filter('wp_head', 'custom_page_title', 1);

老實說不是很確定有沒有發揮SEO效果,還得再觀察與研究下這個作法,但以目前來說是可以行的。