大部分看到都是用 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