WooCommerce,获取当前产品ID

62

我目前正在开发一个WooCommerce主题,试图在产品详细页面中添加侧边栏。

我已经成功地添加了侧边栏(具体来说是这个:http://woocommerce.wp-a2z.org/oik_file/templatescontent-widget-product-php/)。

现在,我正在尝试弄清楚如何将“active”类添加到当前选定的产品,并且似乎无法弄清楚?

换句话说,如果当前产品ID等于侧边栏中的产品ID,则如何执行类似于添加class="active"到li的操作?

我已经进行了多次搜索,但没有找到任何有用的内容,所以我来这里求助。

非常感谢任何帮助!!

7个回答

141

2017年更新 - 自WooCommerce 3以来:

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

WooCommerce 不喜欢您直接访问这些变量。如果 wp_debug 为 true,则可以消除来自 WooCommerce 的任何警告。


2
是的,这是适用于WooCommerce 3.0的正确更新。 - helgatheviking
@helgatheviking 的 get_id() 函数自 2.6.0 版本开始添加。 - Martin van Driel

48

如果查询由于某些原因未被插件修改,您应该能够通过以下方式获取单个产品页面的“id”:

global $post;
$id = $post->ID

或者

global $product;
$id = $product->id;

编辑:自WooCommerce 3.0起,需要更改此内容。

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

1
我无法使用上述两种方法之一检索当前产品ID。我正在使用自定义插件来访问当前显示的插件。请问你能帮我吗? - therealprashant
1
循环内部这个是起作用的。如果你试图在早期挂钩(比如 init)中访问该变量,那么它不会起作用。我无法在这里为你提供进一步的帮助。你需要提出自己的具体和详细问题。 - helgatheviking
嘿,感谢您的评论。可惜我在SO上没有提问的权限了。您能指引我到其他流程,以便于您能够帮助我吗?非常感谢! - therealprashant
6
请参考 @Samyer 2017年的更新。 使用 $product->id 将触发以下消息: __不应直接访问产品属性__。 - Christian Lescuyer
尝试获取非对象的属性'id'和未捕获的错误:调用数组上的成员函数get_id()。 - Dev
显示剩余5条评论

23

自 WooCommerce 2.2 版本以来,您可以简单地使用 wc_get_product 方法。您可以传递 ID 作为参数,如果已经在循环中,则可以直接留空。

wc_get_product()->get_id();

两条线的OR

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

10

获取WordPress Loop中当前项目的ID。

echo get_the_ID(); 

7

正确的方法是:

global $product;

$id = $product->get_id();

1

在进入循环之前保存当前产品ID:

$current_product = $product->id;

然后在侧栏的循环中,再次使用 $product->id 进行比较:

 <li><a <? if ($product->id == $current_product) { echo "class='on'"; }?> href="<?=get_permalink();?>"><?=the_title();?></a></li>

0

你可以通过编程的方式查询 WooCommerce。 你甚至可以将产品添加到购物车中。 我相信一旦你阅读代码,就能够弄清楚如何与 WooCommerce 购物车进行交互。 如何通过编程的方式与 WooCommerce 购物车进行交互

====================================

<?php

add_action('wp_loaded', 'add_product_to_cart');
function add_product_to_cart()
{
    global $wpdb;

    if (!is_admin()) {


        $product_id = wc_get_product_id_by_sku('L3-670115');

        $found = false;

        if (is_user_logged_in()) {
            if (sizeof(WC()->cart->get_cart()) > 0) {
                foreach (WC()->cart->get_cart() as $cart_item_key => $values) {
                    $_product = $values['data'];
                    if ($_product->get_id() == $product_id)
                        WC()->cart->remove_cart_item($cart_item_key);
                }
            }
        } else {
            if (sizeof(WC()->cart->get_cart()) > 0) {
                foreach (WC()->cart->get_cart() as $cart_item_key => $values) {
                    $_product = $values['data'];
                    if ($_product->id == $product_id)
                        $found = true;
                }
                // if product not found, add it
                if (!$found)
                    WC()->cart->add_to_cart($product_id);
            } else {
                // if no products in cart, add it
                WC()->cart->add_to_cart($product_id);
            }
        }
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,