2

我有这行代码显示主题中的摘录:

<p class="desc"><?php echo mb_strimwidth(strip_tags(get_the_content('')), 0, 220, '...'); ?></p>

如何输入此代码以从摘录中删除短代码?

$text = preg_replace( '|\[(.+?)\](.+?\[/\\1\])?|s', '', $text);

我刚刚开始切割 PHP,所以我需要一点帮助来解决这个问题。

谢谢!

4

3 回答 3

3

我建议您使用核心 WordPress 函数strip_shortcodes(),而不是重新发明轮子。

<p class="desc"><?php echo mb_strimwidth(strip_shortcodes(strip_tags(get_the_content(''))), 0, 220, '...'); ?></p>
于 2013-02-25T21:43:22.513 回答
0

在这种情况下不要使用正则表达式!

REGEX 将从摘录中删除您自己的注释,例如:因此,最好使用内置函数,该函数检测已注册的短代码并将其删除:
Hello, on May 27 [1995] , blabla

strip_shortcodes

add_filter('the_excerpt','myRemoveFunc'); function myRemoveFunc(){
    return mb_strimwidth(strip_shortcodes(get_the_content()), 0, 220, '...');
}
于 2015-04-30T10:04:24.273 回答
0

根据@T.Todua 解决方案发布对我有用的解决方案:

add_filter('get_the_excerpt','clean_excerpt');
function clean_excerpt(){

$excerpt = get_the_content();
$excerpt = strip_tags($excerpt, '<a>'); //You can keep or remove all html tags
$excerpt = preg_replace("~(?:\[/?)[^/\]]+/?\]~s", '', $excerpt);

return ($excerpt) ? mb_strimwidth($excerpt, 0, 420, '').new_excerpt_more() : '';
}

function new_excerpt_more($more = '') {
    global $post;
    return '...  <a href="'.get_permalink($post->ID).'" class="readmore">Read More »</a>';
}

我将它分成两个函数,因为我还使用了“更多”过滤器,如下所示:

add_filter('excerpt_more', 'new_excerpt_more');
于 2019-04-29T22:53:14.433 回答