首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >标签云块的过滤根元素

标签云块的过滤根元素
EN

WordPress Development用户
提问于 2020-09-08 13:08:40
回答 1查看 102关注 0票数 1

默认情况下,(Gutenberg)块编辑器中的tag-cloud块呈现根元素,如下所示:

代码语言:javascript
复制
...

这是相应的代码,用于呈现块:https://github.com/WordPress/WordPress/blob/master/wp-includes/blocks/tag-cloud.php#L44

使用pre_render_block进行过滤不起作用。

知道如何过滤这个块的根元素吗?

EN

回答 1

WordPress Development用户

发布于 2020-09-09 07:52:40

毕竟是我自己想出来的。

与其使用pre_render_block过滤器,不如使用render_block过滤器来执行如下操作:

代码语言:javascript
复制
add_filter('render_block', function($html, $block) {
    if ($block['blockName'] !== 'core/tag-cloud') {
        return $html;
    }

    $doc = new \DOMDocument($html, LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);
    $ps = iterator_to_array($doc->getElementsByTagName('p'));
    $p = empty($ps) ? new \DOMElement('p') : current($ps);

    return replaceChild($doc, $p, 'div', ['class' => 'tags'])->saveHTML();
}, 10, 2);

function replaceChild(\DOMDocument $doc, \DOMElement $target, string $tag, array $attrs = []) {
    $replacement = $doc->createElement($tag);

    if (!empty($attrs)) {
        foreach ($attrs as $key => $value) {
            $replacement->setAttribute($key, $value);
        }
    }

    if ($target->hasChildNodes()) {
        $children = iterator_to_array($target->childNodes);
        foreach ($children as $child) {
            $replacement->appendChild($child);
        }
    }

    $target->parentNode->replaceChild($replacement, $target);

    return $doc;
}

这应该会产生类似于

...

的东西。

票数 0
EN
页面原文内容由WordPress Development提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://wordpress.stackexchange.com/questions/374490

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档