这就是为什么要从摘录中删除HTML标记的原因之一,以防止此类问题的发生。然而,有志者事竟成。。。
通过使用正则表达式,您可以关闭仅适用于摘录的打开标记,您可能需要查看以下链接以了解一些想法,
Close HTML Tags
或者你也可以使用这个为WordPress准备的插件,
Advanced Excerpt
或者,如果您觉得有这样的倾向,您可以修改它或对其结构进行采样,并将其应用到您的函数中。
更新
我决定运行一个测试,但是请注意,我使用了一个不同的函数,在创建可定制长度的摘录时,我经常使用这个函数;
将此应用到您的功能中。php文件,
function content($limit) {
global $content;
$content = explode(\' \', get_the_content(), $limit);
if (count($content)>=$limit) {
array_pop($content);
$content = implode(" ",$content).\'...\';
} else {
$content = implode(" ",$content);
}
$content = preg_replace(\'/\\[.+\\]/\',\'\', $content);
$content = apply_filters(\'the_content\', $content);
$content = str_replace(\']]>\', \']]>\', $content);
return $content;
}
然后是,
function closetags($html) {
#put all opened tags into an array
$content = $result;
preg_match_all(\'#<([a-z]+)(?: .*)?(?<![/|/ ])>#iU\', $html, $result);
$openedtags = $result[1]; #put all closed tags into an array
preg_match_all(\'#</([a-z]+)>#iU\', $html, $result);
$closedtags = $result[1];
$len_opened = count($openedtags);
# all tags are closed
if (count($closedtags) == $len_opened) {
return $html;
}
$openedtags = array_reverse($openedtags);
# close tags
for ($i=0; $i < $len_opened; $i++) {
if (!in_array($openedtags[$i], $closedtags)){
$html .= \'</\'.$openedtags[$i].\'>\';
} else {
unset($closedtags[array_search($openedtags[$i], $closedtags)]); }
}
return $html;
}
然后在你的主题中,你会做以下事情,
<?php echo closetags( content(55) );?>
其中55=您希望摘录的字数长度。
如果要使用后期编辑屏幕中的实际摘录框,还可以将此片段添加到函数文件中,
function excerpt($limit) {
global $excerpt;
$excerpt = explode(\' \', get_the_excerpt(), $limit);
if (count($excerpt)>=$limit) {
array_pop($excerpt);
$excerpt = implode(" ",$excerpt).\'...\';
} else {
$excerpt = implode(" ",$excerpt);
}
$excerpt = preg_replace(\'/\\[.+\\]/\',\'\', $excerpt);
$excerpt = apply_filters(\'the_excerpt\', $excerpt);
$excerpt = str_replace(\']]>\', \']]>\', $excerpt);
return $excerpt;
}
它的用途是,
<?php echo closetags( excerpt(55) );?>
但是,如果使用后期编辑屏幕中的实际摘录框,则必须手动编写
<strong>,<em>,<i>,<a>,etc..
当然是标签!除非修改摘录框的默认TinyMCE。
所以你有了它,你在这两种情况下都被涵盖了,要么。。。
1) 获取来自\\u内容的摘录()2)获取来自\\u摘录()的摘录
NOTE 通过编写关闭HTML标记的功能,可能有一种更有效的方法Milan 如果你想进一步调查的话。