0

所以我正在展示来自 ACF WYSIWYG 的一些内容

{{  post.get_field('content') }}

我得到这样的东西

<p class=p1">Text</p>
<p class=p1">Text<p1>
<p class=p1"><img src="someimagejpg" /><p>
<p class=p1">Text<p1>

一切都很好,除了包裹在 ap 标签中的图像。

我搜索了一些过滤器,看起来主要解决方案如下。

里面的functions.php

 function filter_ptags_on_images($content) {
     $content = preg_replace('/<p>\s*(<a .*>)?\s*(<img .* \/>)\s*(<\/a>)?\s*<\/p>/iU', '\1\2\3', $content);
     return preg_replace('/<p>\s*(<iframe .*>*.<\/iframe>)\s*<\/p>/iU', '\1', $content);
}
add_filter('acf_the_content, 'filter_ptags_on_images');

但这似乎不适用于木材

看起来 Timber 有自己的方式来注册过滤器,但它对我不起作用,任何帮助都将不胜感激,谢谢!

我在 Timber 上试过这个:

add_filter( 'timber_context', array( $this, 'add_to_context' ) );

 function add_to_twig( $twig ) {
    /* this is where you can add your own functions to twig */

    $twig->addFilter('acf_the_content', new Twig_Filter_Function('filter_ptags_on_images'));
    $twig->addFilter('the_content', new Twig_Filter_Function('filter_ptags_on_images'));

    return $twig;
}

不工作

4

1 回答 1

0

您可以在 striptags 过滤器中找到您的解决方案

{{ some_html|striptags }}

还有一件好事是,您可以避免删除一些 HTML 标签,因为您可能需要它们,如下所示:

{{ some_html|striptags('<br><p>') }}

这将删除所有 HTML 标签,除了 <br/>, <br>, <p>, and </p>

您可以找到更多关于此的信息 -> Timber/striptags

编辑:嘿马里奥,

我以为你想把它们都剥掉。现在这是使用.unwrap()使用 jQuery 的一种棘手方法。 您需要做的只是在您的内容中添加一些类到您的 img 标记作为选择器。

我现在没有时间创建一些过滤器,但是您可以在此处查看如何使用 PHP 删除包装元素以及如何创建自定义树枝过滤器。

于 2017-07-17T13:42:06.373 回答