【问题标题】:Get some product data in the body for WooCommerce Single product pages在 WooCommerce 单一产品页面的正文中获取一些产品数据
【发布时间】:2021-05-31 08:19:52
【问题描述】:

我正在尝试提取正在查看的产品的产品 ID,以便将该 ID 传递到 TrustPilot 的小部件以显示对该产品的评论。

我尝试使用以下代码创建片段:

global $product;
$id = $product->get_id()

但是我遇到了一个错误 - 老实说 - 我真的不明白我在做什么!一天中的大部分时间我都在寻找解决方案,所以我希望有人能提供帮助!

如前所述,目的是能够在 TrustPilot“TrustBox”中填充 data-sku="xxxxxxxx" 字段 - 一种从 trustpilot 提取和呈现评论的 JavaScript 工具。我认为需要在元素的 HTML 中更新 ID。

整个 TrustPilot 代码如下所示:

将此添加到页眉

<!-- TrustBox script -->
<script type="text/javascript" src="//widget.trustpilot.com/bootstrap/v5/tp.widget.bootstrap.min.js" async></script>
<!-- End TrustBox script -->

将此添加到正文中,您希望小部件出现的位置

<!-- TrustBox widget - Product Reviews SEO -->
<div class="trustpilot-widget" data-locale="en-GB" data-template-id="5717796816f630043868e2e8" data-businessunit-id="5d472f87ff988700011c73b8" data-style-height="700px" data-style-width="100%" data-theme="light" data-sku="487" data-name="10 Plantshake Pack" data-review-languages="en">
  <a href="https://uk.trustpilot.com/review/foga.co" target="_blank" rel="noopener">Trustpilot</a>
</div>
<!-- End TrustBox widget -->

【问题讨论】:

    标签: php wordpress woocommerce product hook-woocommerce


    【解决方案1】:

    更新

    获取单个产品页面的产品ID,可以使用:$product_id = get_the_ID();

    为了确保在单个产品页面中获取产品对象,您可以使用:

    $product = wc_get_product( get_the_ID() );
    

    甚至更好:

    global $product;
    
    if ( ! is_a( $product, 'WC_Product' ) ) {
        $product = wc_get_product( get_the_ID() );
    }
    

    现在您可以使用挂钩函数,在单个产品页面中插入所有相关代码。您的 javscript 将使用产品名称和 sku 动态填充:

    add_action('woocommerce_before_single_product', 'action_before_single_product', 5 );
    function  action_before_single_product(){
        global $product;
        
        $id   = $product->get_id(); // Product Id
        $sku  = $product->get_sku(); // Product sku
        $name = $product->get_name(); // Product name
        ?> 
        <!-- TrustBox widget - Product Reviews SEO -->
        <div class="trustpilot-widget" data-locale="en-GB" data-template-id="5717796816f630043868e2e8" data-businessunit-id="5d472f87ff988700011c73b8" data-style-height="700px" data-style-width="100%" data-theme="light" data-sku="<?php echo $sku; ?>" data-name="<?php echo $name; ?>" data-review-languages="en">
          <a href="https://uk.trustpilot.com/review/foga.co" target="_blank" rel="noopener">Trustpilot</a>
        </div>
        <!-- End TrustBox widget -->
        <?php
    }
    

    代码位于活动子主题(或活动主题)的functions.php 文件中。它应该可以工作。

    【讨论】:

    • Loic - 非常感谢您花时间详细回答!我能否请您澄清一下这些不同的文本应该在哪里/如何部署?
    • 嗯 - 对不起,我还在挣扎!我尝试将代码(较长的最后一段代码)直接放入产品页面,我看到了: get_id() $sku = $product->get_sku(); $name = $product->get_name(); ?> 就在小部件上方,没有填充数据,这意味着 ID 没有被拉进来……还有什么想法吗?
    • 可能不会!我将它放入产品布局模板中(并且我还直接在产品描述中进行了测试......)我应该把它放在哪里?
    • 感谢@LoicTheAztec - 它有效!有点……它正确地通过了,这太棒了!但是,评论小部件只是被该功能强制到页面顶部。如何在页面上的合适位置插入实际小部件并仍然动态填充它?
    • @OllieThirlwell-Pearce 您希望它在哪里?,在产品页面的哪个位置?
    猜你喜欢
    • 2018-12-10
    • 2021-01-15
    • 2017-02-21
    • 1970-01-01
    • 2021-11-01
    • 1970-01-01
    • 2018-09-11
    • 1970-01-01
    • 2015-10-07
    相关资源
    最近更新 更多