修复 YITH Compare 只在产品页可用:让 Header 对比按钮在全站任意页面弹出对比表

很多 WooCommerce 商城在安装 YITH WooCommerce Compare 插件后会遇到一个很常见的问题:

✅ 在 产品详情页(Product page)产品列表页(Shop page) 点击 Compare 能正常弹出对比表

❌ 但在 Wishlist 页面、博客页、首页、About 页面 点击 Header 的 Compare 图标却没反应

比如你点 Header 图标后 Network 里可能只出现:

  • https://你的域名/cdn-cgi/rum(204 No Content)

而不是 Compare 正常工作的请求:

  • https://你的域名/?wc-ajax=yith-woocompare-reload-compare(200 OK)

这说明:点击事件没有触发 YITH Compare 的 AJAX,而是页面里根本没加载 Compare 所需脚本

本文分享一个最简单、最稳定的解决方案:

强制 YITH Compare 脚本全站加载

让你在任何页面点 Header Compare 都能直接弹出对比表。


为什么 YITH Compare 在非产品页无法弹出?

YITH Compare 插件后台有一个设置:

Show compare in:

  • Shop page

  • Product pages

  • Both

这个选项的含义是:

"Compare 按钮显示在哪些产品相关页面上"

但问题在于:

✅ 插件会在 Shop / Product 这些页面里自动加载 Compare 所需的 JS

❌ 在 Wishlist、博客等普通页面,插件为了优化性能,可能不会加载 Compare 的核心脚本

结果就是:

  • 你的 Header 上虽然有 Compare 图标

  • 也加了正确 class:yith-woocompare-open

  • 但是插件 JS 没加载 → 点击根本打不开弹窗


解决方案:强制 Compare 脚本全站加载

✅ 适用场景

如果你希望:

  • Header Compare 图标 全站任意页面都可点开对比表

  • 不想依赖插件默认"只在产品页加载脚本"

  • 不想改插件源码(避免更新覆盖)

那么方案 C 是最稳的做法。


第一步:确保 Header Compare 按钮写法正确

你的 Header 代码类似这样是正确的 ✅:

复制代码
<a href="#" aria-label="Compare" title="Compare" class="yith-woocompare-open">
  <span class="compare-icon">
    <i class="porto-icon-compare-link"></i>
    <span class="compare-count">5</span>
  </span>
</a>

关键点只有一个:

class="yith-woocompare-open"


第二步:把代码加入 functions.php(核心修复)

把下面代码加入你的 子主题 child theme 的 functions.php

路径一般是:
wp-content/themes/你的子主题/functions.php

复制代码
/**
 * Force YITH Compare scripts to load on all pages
 * So the header compare icon works globally (Wishlist / Blog / Home etc.)
 */
add_action('wp_enqueue_scripts', function () {
    // Don't load in admin dashboard
    if (is_admin()) return;

    // Main script for YITH Compare (script handle may vary by version)
    if (wp_script_is('yith-woocompare-main', 'registered')) {
        wp_enqueue_script('yith-woocompare-main');
    }

    // Popup dependency (some versions rely on Colorbox)
    if (wp_script_is('jquery-colorbox', 'registered')) {
        wp_enqueue_script('jquery-colorbox');
    }
}, 99);

✅ 保存后清缓存,然后刷新任意页面(如 /wishlist/

此时点击 Header Compare 图标就会正常弹出对比表。


第三步:清理缓存(非常重要)

如果你用了缓存或加速服务(非常常见):

  • WP Rocket / LiteSpeed Cache / Autoptimize

  • Cloudflare 缓存

  • 主题 Porto 的性能优化

请务必做这几步:

✅ 清 WordPress 缓存

✅ 清 Cloudflare 缓存(可用 "Purge everything" 或 Purge URL)

✅ 浏览器强制刷新(Mac:Command + Shift + R


如何确认修复成功?

打开浏览器开发者工具(F12),点击 Header Compare 按钮,观察 Network:

✅ 成功时应该出现:

  • /?wc-ajax=yith-woocompare-reload-compare

  • 状态码 200 OK

如果你还是只看到:

  • /cdn-cgi/rum

  • 状态码 204

说明 Compare 脚本仍未生效(通常是脚本被延迟加载或未加载)。


常见问题排查(如果仍然打不开)

1)确认页面是否加载了 compare 脚本

在不弹窗的页面(比如 wishlist 页面)按 F12 → Console 输入:

复制代码
document.querySelectorAll('.yith-woocompare-open').length

返回值应该 > 0

如果返回 0,说明你的按钮没真正输出或 class 没生效。


2)性能插件延迟 JS 导致 Compare 失效

如果你启用了 "延迟 JS / 合并 JS / 延迟执行",建议把以下关键词加入排除列表:

  • woocompare

  • yith-woocompare

  • colorbox

这一步很关键,因为 Compare 弹窗属于强交互功能,最怕脚本执行顺序被打乱。


这个方案会影响页面加载速度吗?

很多人担心:全站加载 Compare 脚本会不会变慢?

✅ 结论:一般影响非常小,且可接受。

原因是:

  • Compare 脚本通常几十 KB

  • 只是让页面具备 Compare 能力

  • 真正的 AJAX 请求只会在你点击 Compare 时触发

    (平时不会不断请求数据)

对于 B2B/询盘型网站来说,全站可用的体验比这点资源开销更重要。


推荐设置:让体验更像 Alibaba

如果你想让体验更专业,建议你在 YITH Compare 设置里选择:

Show table when:

✅ The user manually clicks on view anchor

因为 Header 图标就相当于 "View compare table" 入口,点击立即弹出最符合用户预期。


FAQ:YITH Compare 全站弹窗常见问题

Q1:我必须用子主题吗?

强烈建议 ✅

因为主主题更新可能会覆盖 functions.php 修改。


Q2:我的版本脚本句柄不是 yith-woocompare-main 怎么办?

不同版本确实可能不同,但你这次能成功,说明你站点版本已经匹配。

如果你未来遇到句柄不一致的情况,最简单方法是:

  • 打开页面源代码(view-source)

  • 搜索 woocomparecompare

  • 找到脚本文件名,再针对性 enqueue


Q3:Compare 图标显示数量怎么自动更新?

compare-count 的数字通常可以通过 JS 或 shortcode 动态刷新。

如果你想做成更像电商的"实时数量徽标",我也可以帮你加一段轻量脚本自动同步。


总结

如果你安装了 YITH WooCommerce Compare,并希望:

Header Compare 图标在 Wishlist / Blog / Home 等任何页面都能弹出对比表

最稳的办法就是:

强制 Compare 脚本全站加载

把下面核心代码加入 functions.php 即可:

复制代码
add_action('wp_enqueue_scripts', function () {
    if (is_admin()) return;
    if (wp_script_is('yith-woocompare-main', 'registered')) {
        wp_enqueue_script('yith-woocompare-main');
    }
    if (wp_script_is('jquery-colorbox', 'registered')) {
        wp_enqueue_script('jquery-colorbox');
    }
}, 99);
相关推荐
syjy213 小时前
(含下载)woocommerce photo reviews wordpress插件使用教程
wordpress·wordpress建站
2601_954023661 天前
GoBiz - vCard SaaS Digital Business Card Builder Download Free
seo·wordpress·gpl
WordPress学习笔记2 天前
XX主题XXTheme
wordpress
syjy22 天前
WPBakery Page Builder 使用教程(含下载)
wordpress·wordpress插件
syjy23 天前
(含下载)BeTheme WordPress主题使用教程
前端·wordpress·wordpress建站
He1955014 天前
Elementor 自定义块开发
wordpress·elementor·elementor块开发
He1955015 天前
wordpress搭建块
开发语言·wordpress·古腾堡·wordpress块
WordPress学习笔记6 天前
wordpress独立站主题
wordpress·wordpress主题
WordPress学习笔记7 天前
三级产品分类折叠展示wordpress外贸主题
wordpress
syjy27 天前
(含下载)Slider Revolution WordPress插件使用教程
wordpress·wordpress插件