You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WooCommerce产品ID与主题兼容问题:动态字体预览失效求助

解决WooCommerce产品ID动态获取问题

你的主题虽适配WooCommerce但不支持其相关特性,字体预览功能仅在硬编码产品ID时可正常运行,之前尝试的全局$product方法失效,以下是可行的解决步骤:

  • 正确获取产品ID的PHP方法
    WooCommerce产品本质是WordPress自定义文章类型,在单个产品页面或产品循环中,直接调用get_the_ID()是最可靠的方式。若需使用$product对象,需先正确实例化(WooCommerce 3.0+版本推荐用get_id()替代直接访问id属性,避免兼容性问题):

    <?php
    // 仅在单个产品页面执行
    if (is_product()) {
        // 方法1:直接获取当前产品ID
        $product_id = get_the_ID();
    
        // 方法2:实例化产品对象后获取ID(需用到产品其他属性时使用)
        $product = wc_get_product(get_the_ID());
        $product_id = $product->get_id();
    }
    ?>
    
  • 修改JS代码实现动态传参
    将动态获取的产品ID传入JS,同时替换硬编码的nonce和AJAX地址(消除安全隐患、适配多环境),完整代码如下:

    <?php
    if (is_product()) {
        $product_id = get_the_ID();
        $ajax_nonce = wp_create_nonce('twfp_nonce');
    ?>
    <script type="text/javascript" id="twfp-script-js-extra">
        var twfp = '';
        $(document).ready(function() {
            /* <![CDATA[ */
            const defaultProductId = <?php echo json_encode($product_id); ?>;
            // 优先使用输入框值,无值则用当前产品ID
            var dynamicProductId = $("#download_listing_id").val()?.toString() ?? defaultProductId.toString();
            console.log({dynamicProductId});
            twfp = {
                "ajax_url": "<?php echo admin_url('admin-ajax.php'); ?>",
                "post_id": dynamicProductId,
                "nonce": "<?php echo $ajax_nonce; ?>"
            };
            /* ]]> */
        })
    </script>
    <?php } ?>
    
  • 关键注意事项

    • 用is_product()做条件判断,确保脚本仅在单个产品页面加载,避免其他页面出现未定义变量错误。
    • 动态生成nonce和AJAX地址,替代硬编码值,提升安全性与环境适配性。

内容的提问来源于stack exchange,提问作者Amer Riaz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 11:37:08