作为元描述出现在_excerpt中的HTML实体

时间:2013-11-27 作者:markratledge

这一定很简单,但当我在header中使用下面的函数时。php获取文章摘录,为单个文章或页面使用元描述

setup_postdata($post); $excerpt = get_the_excerpt(); echo $excerpt;

我最终得到了撇号、引号等的html实体,如下所示:

<meta name="description" content="There&amp;#8217;s an interesting thing
going on in the world of digital music; it&amp;#8217;s moving
into the &amp;#8220;cloud.&amp;#8221; ...">
我试过了echo htmlentities($excerpt);echo html_entity_decode($excerpt); 没有运气。如何防止这些实体出现?我没有在函数中使用函数。php生成摘录。

这是一种变通方法,因为我有数百篇没有手动摘录的帖子,我认为手动摘录不受实体问题的影响,这就是我尝试使用标准摘录的原因。

1 个回复
最合适的回答,由SO网友:gmazzap 整理而成

我想你想在单数帖子/页面上发布这个,所以你不想设置全局帖子对象,它已经设置好了。

在那之后,问题是get_excerpt 将运行一些添加html实体的筛选器。

这是因为get_the_excerpt 用于页面内容(在<body> 还有一个副作用,当页面上没有手动摘录时,该函数也会调用the_content 过滤器,这可能会导致一些插件的兼容性问题。。。因此,我建议不要使用该函数来偏离描述,而是使用一些低级函数:

经过快速测试后,我认为这应该很好,但可能可以改进:

在里面functions.php

function head_description( $desc = \'\' ) {
  $desc = str_replace( \'"\', \'\', html_entity_decode( $desc ) );
  $desc = stripslashes( wp_filter_nohtml_kses( $desc ) );
  return str_replace( \'&amp;\', \'&\', $desc );
}
然后在header.php

<head>
<?php
if ( is_singular() ) {
  global $post;
  $excerpt = $post->post_excerpt ? : wp_trim_words( $post->post_content, 55, \'\' );
  $desc = head_description( $excerpt );
} else {
  $desc = head_description( \'Foo\' ); // description for non singular pages
}
?>
<meta name="description" content="<?php echo $desc; ?>">
<?php } ?>
请确保在中使用双引号content=" ... " 因为描述中的单引号不会转义,所以如果使用单引号包装内容,就会出现问题。

结束