我有这个功能可以帮助我很好地修剪帖子标题:
namespace Helpers;
..
function _s_trim_post_title ( $length = null, $delimiter = null ) {
$title = get_the_title();
$trimmed_title = mb_strimwidth( $title,
0,
$length === null ? BIG_INT : $length,
\'\' // Won\'t use, bugs out.
);
$url = esc_url( get_permalink() );
if( strlen( $title ) == strlen( $trimmed_title ) ) {
$delimiter = \'\';
}
$delimiter = $delimiter === null ? \'\' : (string)$delimiter;
$output = \'<h2 class="post-title"><a href="\' . $url . \'" rel="bookmark">\' . $trimmed_title . $delimiter . \'</a></h2>\';
return $output;
}
我叫它,开
content.php
具体如下:
echo Helpers\\_s_trim_post_title(24, \'...\');
我在想,用过滤器做这些怎么样:
add_filter( \'the_title\', \'Helpers\\\\_s_trim_post_title\', 24, \'...\');
现在,在我的
content.php
, 我会用简单的:
the_title()
不幸的是,这会破坏整个服务器并将其发送到一个连续的循环中。
为什么?
最合适的回答,由SO网友:obiPlabon 整理而成
下面是正确的代码片段。希望对你有用。
Helper function
namespace Helpers;
..
function _s_trim_content( $content = \'\', $length = null, $delimiter = null ) {
$trimmed_content = mb_strimwidth( $content,
0,
is_null( $length ) ? BIG_INT : $length,
\'\' // Won\'t use, bugs out.
);
if ( mb_strlen( $content ) === mb_strlen( $trimmed_content ) || is_null( $delimiter ) ) {
$delimiter = \'\';
}
return $trimmed_content . $delimiter;
}
the_title
filter
add_filter( \'the_title\', function( $title, $post_id ) {
if ( \'post\' === get_post_type( $post_id ) ) {
return \\Helpers\\_s_trim_content( $title, 24, \'...\' );
}
return $title;
}, 10, 2 );