WordPress customize site title in theme

大部分看到都是用 wp_title 這個 filter 去改,但對於我 wp_title 不起作用,我找到資料提到自 WordPress v4.4.0 起,標題的生成方式已更改。這也許是我用 wp_title 仍無法修改的主因

最簡單的用法

以下範例是最簡單的做法,將下列代碼置主題根目錄下的 functions.php

/**
 * customize site title
 * @link https://v123.tw/wordpress-customize-site-title-in-theme/
 */
function custom_document_title( $title ) {
    return 'Here is the new title';
}
add_filter( 'pre_get_document_title', 'mg_site_title', 10 );

加入一些判斷

/**
 * customize site title
 * @link https://v123.tw/wordpress-customize-site-title-in-theme/
 * @return string
 */
function mg_site_title($title){
    if(is_front_page() || is_home()){
        $title =  get_bloginfo('name');
    }else{
        $title =  get_the_title();
    } 
    return $title;
}
add_filter( 'pre_get_document_title', 'mg_site_title', 10 );

更多判斷

雖然 wp_title 對我不起作用,但官網文件仍然有價值,可以參考其判斷方式,這邊做了一點點的修改,一樣可以套用 wp_title 的處理方法
https://developer.wordpress.org/reference/functions/wp_title/#div-comment-375

/**
 * customize site title
 * @link https://v123.tw/wordpress-customize-site-title-in-theme/
 * @return string
 */
function v123_theme_name_wp_title( $title ) {
    if ( is_feed() ) {
        return $title;
    }
     
    global $page, $paged;
 
    // Add the blog name
    $title .= get_bloginfo( 'name', 'display' );
 
    // Add the blog description for the home/front page.
    $site_description = get_bloginfo( 'description', 'display' );
    if ( $site_description && ( is_home() || is_front_page() ) ) {
        $title .= " $sep $site_description";
    }
 
    // Add a page number if necessary:
    if ( ( $paged >= 2 || $page >= 2 ) && ! is_404() ) {
        $title .= " $sep " . sprintf( __( 'Page %s', '_s' ), max( $paged, $page ) );
    }
    return $title;
}
add_filter( 'pre_get_document_title', 'v123_theme_name_wp_title', 10 );

https://stackoverflow.com/a/62410909/6784662

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

這個網站採用 Akismet 服務減少垃圾留言。進一步瞭解 Akismet 如何處理網站訪客的留言資料