wordpress 如何使用 php 检查正在加载的帖子/页面的 html 中是否存在 css 类名

问题描述 投票:0回答:1

当页面/帖子加载时,如果特定的 CSS 类名存在于该帖子/页面的 HTML 中,我想执行 PHP 代码,对性能影响最小(页面显示)。如果该类存在,代码将调用链接的资源将添加到 html head 中。

代码放在添加到function.php中的代码片段中

为了检查 html 中是否存在 css 类,我尝试了几种方法,但从未成功(

has_term()
从未找到,等等)。

我可能找到了解决方案的一部分,但如何获取 html

$result = $html->find('.classname');

那么,如何检查正在加载的页面/帖子的 html 代码中是否存在 css 类?

php html wordpress class
1个回答
0
投票

我可以想到两种方法来实现这一目标。

首先,如果您在网站的头部确实不需要它,您可以直接连接到主内容过滤器并使用 6.2 中引入的 WP_HTML_Tag_Processor 类。

这样做的优点是它是页面本机生命周期的一部分,并且不应该产生任何意外的副作用。这样做的缺点是,当它运行时,您可能位于网站的

<body>
中,因此您无法影响
<head>

add_filter(
    'the_content',
    static function ($content) {
        $processor = new WP_HTML_Tag_Processor($content);

        if ($processor->next_tag(['class_name' => 'your-class-here'])) {
            // Do something here, however you should be aware that wp_head might have already been called
        }

        return $content;
    }
);

第二种方法是抓取当前对象并检查 HTML。

这样做的好处是它将运行得足够早,以便您可以将一些内容输出到站点的

<head>
中。这样做的缺点是,正如所写的那样,您没有应用内容过滤器。如果您的内容直接来自数据库,这可能不是问题。如果您有其他插件添加这些类,此时可能不会添加它们。但是,您可以尝试调用
apply_filters('the_content', $post->post_content)
,但是我已经看到这会在某些网站上引起问题,因为其他开发人员可能不希望每个页面会多次调用它。

add_action(
    'wp_enqueue_scripts',
    static function () {
        $post = get_queried_object();
        if ($post instanceof WP_Post) {
            $processor = new WP_HTML_Tag_Processor($post->post_content);
            if ($processor->next_tag(['class_name' => 'video-responsive-container'])) {
                // Do something here
            }
        }
    }
);
© www.soinside.com 2019 - 2024. All rights reserved.