我对PHP比较陌生;wordpress,但不用于编程。
我想拥有一个相对于$post
标题,所以我创建了以下过滤器并将其添加到functions.php
:
add_filter(\'wp_title\', \'filter_pagetitle\');
function filter_pagetitle($title) {
global $post;
return $title . $post->post_title;
}
然而,标题仍然与
$title
, 没有与文章标题连接,所以我采用了另一种方法,使用
get_the_title()
:
add_filter(\'wp_title\', \'filter_pagetitle\');
function filter_pagetitle($title) {
global $post;
return $title . get_the_title();
}
然而,这导致
500 - internal server error
(即使我替换为
get_the_title($post->ID)
), 因此,我想捕捉错误并将当前固定标题与
"error"
:
add_filter(\'wp_title\', \'filter_pagetitle\');
function filter_pagetitle($title) {
global $post;
try {
$toReturn = $title . get_the_title();
} catch (Exception $e) {
$toReturn = $title . " error";
}
return $toReturn;
}
但我仍然得到了500个内部服务器错误。我最后在标题中写下了这句话。php,最终有效:
<title>Some fixed title | <?php echo get_the_title(); ?></title>
然而,为什么它在
functions.php
? 我是否错误地声明了新变量?还是我的串联操作不正确?
SO网友:Bikash Waiba
您可以避免在主题模板中使用硬编码的标题标记。仅使用theme support.
add_theme_support(\'title-tag\');
或者,如果你想使用title标签,那么你可以这样做。
<title><?php wp_title(\'|\', true, \'right\');?></title>
然后,您可以将过滤器应用为
/**
* Filters wp_title to print a neat <title> tag based on what is being viewed.
*
* @param string $title Default title text for current view.
* @param string $sep Optional separator.
* @return string The filtered title.
*/
function wpdocs_theme_name_wp_title( $title, $sep ) {
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( \'wp_title\', \'wpdocs_theme_name_wp_title\', 10, 2 );
请参见
wp_title()