这完全取决于你如何获得冠军。如果您使用的是全局对象(即。$post->post_title
然后,您不需要通过任何过滤器,您必须使用一些奇特的后处理来缩减标题。
但是,如果您在post循环中,请使用the_title()
回应当前帖子的标题或get_the_title()
以编程方式返回。
如果您使用这两个功能中的一个,WordPress会自动将文章标题通过过滤器传递,然后再将其返回给您。
然后,您可以将以下内容添加到sidebar.php
文件:
function japanworm_shorten_title( $title ) {
$newTitle = substr( $title, 0, 20 ); // Only take the first 20 characters
return $newTitle . " …"; // Append the elipsis to the text (...)
}
add_filter( \'the_title\', \'japanworm_shorten_title\', 10, 1 );
现在,每次你提到
the_title()
或
get_the_title()
在侧边栏中,他们将返回自动缩短的版本,而不是完整版本。
只需记住在sidebar.php
文件,否则它也将应用于主题的其他地方:
remove_filter( \'the_title\', \'japanworm_shorten_title\' );
如果您想要一个可以在任何地方使用的功能,我建议您制作自己的版本
get_the_title()
和
the_title()
并在代码中使用它们。例如:
function japanworm_get_the_title( $length = null, $id = 0 ) {
$post = &get_post($id);
$title = isset($post->post_title) ? $post->post_title : \'\';
$id = isset($post->ID) ? $post->ID : (int) $id;
if ( !is_admin() ) {
if ( !empty($post->post_password) ) {
$protected_title_format = apply_filters(\'protected_title_format\', __(\'Protected: %s\'));
$title = sprintf($protected_title_format, $title);
} else if ( isset($post->post_status) && \'private\' == $post->post_status ) {
$private_title_format = apply_filters(\'private_title_format\', __(\'Private: %s\'));
$title = sprintf($private_title_format, $title);
}
}
// Shorten the title
if ( null != $length ) {
$length = (int) $length;
$title = substr( $title, 0, $length ); // Only take the first 20 characters
$title .= " …";
}
return apply_filters( \'the_title\', $title, $id );
}
function japanworm_the_title($before = \'\', $after = \'\', $echo = true, $length = null) {
$title = get_the_title($length);
if ( strlen($title) == 0 )
return;
$title = $before . $title . $after;
if ( $echo )
echo $title;
else
return $title;
}
这些是从原件中复制的
the_title()
和
get_the_title()
函数,因此它们应该以相同的方式在循环中工作。不过,我还没有测试过这个。