Получить некоторые данные о продукте в теле для страниц с одним продуктом WooCommerce

#php #wordpress #woocommerce #product #hook-woocommerce

#php #wordpress #woocommerce woocommerce #продукт #крюк-woocommerce

Вопрос:

Я пытаюсь получить идентификатор продукта для просматриваемого продукта, чтобы передать этот идентификатор в виджет TrustPilot для отображения отзывов об этом продукте.

Я попытался создать фрагмент кода с помощью этого кода:

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

Но я получил сообщение об ошибке и — буду честен — я действительно не понимаю, что я делал! Я искал решения большую часть дня, так что я надеюсь, что кто-нибудь будет достаточно любезен, чтобы помочь!

Как уже упоминалось, цель состоит в том, чтобы иметь возможность заполнить data-sku="xxxxxxxx" поле в TrustPilot «TrustBox» — инструменте javascript, который извлекает и представляет отзывы из trustpilot. Я думаю, идентификатор нужно будет обновить в HTML для элемента.

Весь код 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 -->
 

Ответ №1:

Обновлено

Чтобы получить идентификатор продукта на отдельных страницах продукта, вы можете использовать: $product_id = get_the_ID();

Чтобы быть уверенным в получении объекта product на отдельных страницах продукта, вы можете использовать:

 $product = wc_get_product( get_the_ID() );
 

Или даже лучше:

 global $product;

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

Теперь вы можете использовать подключенную функцию, чтобы вставить весь связанный код на отдельные страницы продукта. Ваш javscript будет динамически заполняться названием продукта и артикулом:

 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 файл активной дочерней темы (или активной темы). Это должно сработать.

Комментарии:

1. Loic — большое спасибо, что нашли время ответить так подробно! Могу ли я попросить вас уточнить, где / как должны быть развернуты эти различные фрагменты текста?

2. Хм — извините, я все еще борюсь! Я попытался поместить код (более длинный, последний фрагмент кода) непосредственно на страницу продукта, и я вижу это: get_id() $sku = $product-> get_sku(); $name = $product-> get_name(); ?> Прямо над виджетом, которыйданные не заполнены, что означает, что идентификатор не вводится… Есть еще идеи?

3. Вероятно, нет! Я помещаю это в шаблон макета продукта (и я также тестировал прямо в описание продукта …) Куда я должен их поместить?

4. Спасибо @LoicTheAztec — это работает! Вроде того… Он проходит правильно, что удивительно! Однако виджет отзывов просто помещается в начало страницы с помощью функции. Как я могу вставить фактический виджет в подходящее место на странице и по-прежнему динамически заполнять его?

5. @OllieThirlwell-Pearce Где именно вы хотите, чтобы это было? В каком месте на странице продукта?