如何将HTML添加到_excerpt()&_content()输出?

时间:2016-11-05 作者:Cedon

我正在构建一个主题,我需要在第一个字母中添加一个dropcap。这可以通过用<span class="dropcap></span>. 制作升降盖的实际工作将使用Adobe\'s Dropcap.js.

我想这样做的输出the_excerpt() 当然可以此外,我还想将这个span标记添加到每个段落元素的第一个字符中,该元素是H3元素(H3+p)的同级元素。

我的首选是使用PHP来实现这一点,而不是编写JavaScript或jQuery脚本来解析文档并插入它。

到目前为止,我只使用the_excerpt() 这是一个彻底的失败,导致了一个关于分配内存耗尽的致命错误。但代码如下:

if ( ! function_exists( \'test_excerpt_dropcap\' ) ) :
function test_excerpt_dropcap() {
    global $post;
    $the_excerpt = get_the_excerpt();
    if ( is_singular() && has_excerpt() ) {
        $the_excerpt = 
        preg_replace(\'/^(.)/\', \'<span class="dropcap">\\1</span>\', $the_excerpt);
    }
    return $the_excerpt;
}
add_filter( \'get_the_excerpt\', \'test_excerpt_dropcap\' );
endif;

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

get_the_excerpt() 返回摘录,但仅限于after applying get_the_excerpt filters to it. 这会导致无限递归,因为过滤器处理程序将被调用到无限深度。

当然,最好的解决方案是css解决方案(参见@spacegrrl的答案),但如果您有保留该解决方案的理由<span>, 请注意,摘录可以作为参数传递给处理程序。只需添加$the_excerpt 参数并使用该参数,而不是调用get_the_excerpt().

SO网友:spacegrrl

您可能只能使用CSS来执行此操作。

如果有一个类可以让您选择摘录,那么您可以使用其他CSS伪类来选择第一段的第一个字母。

.excerpt p:first-of-type::first-letter {
   /* dropcap styling */
}
first-of-type, first-letter

对于第二个任务,使用同级选择器可以在每个h3之后获得第一个p标记:

.content h3 + p::first-letter {
   /* dropcap styling */
}

adjacent sibling selector