2015-09-13 210 views
2

我在为functions.php中的单个产品页面中的产品获取产品SKU时遇到了很多麻烦。我有多个单独的产品页面,我希望根据产品显示不同的文本。我创建了一个儿童主题,我正在使用functions.php文件。我是新来的wordpress和编辑主题,所以我不太理解操作的顺序。我能够使代码循环工作,并为我提供所有产品的所有SKU,但这与我所在的实际页面无关。Woocommerce在functions.php中为单个产品页面获取产品sku

我试过一堆东西。常见的解决方案似乎是:

global $product; 
echo $product->get_sku(); 

但这并不起作用。出于某种原因,$ product变量在functions.php脚本中为null。

我已遍历所有产品帖子并获取帖子ID的循环。我也尝试获取当前页面的ID,但也没有成功(下面的代码是从另一个网站复制的)。任何帮助将不胜感激。谢谢。

$full_product_list = array(); 
    $loop = new WP_Query(array('post_type' => array('product', 'product_variation'), 'posts_per_page' => -1)); 

    while ($loop->have_posts()) : $loop->the_post(); 
     $theid = get_the_ID(); 
     $product = new WC_Product($theid); 
+0

你在运行你的代码时使用了什么钩子/模板? – helgatheviking

+0

我创建了一个儿童主题,并且正在编辑functions.php脚本。我对Woocommerce的钩子没有问题。我的行为看起来像这样:add_action('woocommerce_after_single_product_summary','wc_product_add_text',35); – brad14

回答

0

get_sku()作品就好假设以任何理由你的主题没有去除woocommerce_after_single_product_summary

add_action('woocommerce_after_single_product_summary', 'so_32545673_add_sku', 35); 
function so_32545673_add_sku(){ 
    global $product; 
    if($product->get_sku()) { 
     echo 'the sku = ' . $product->get_sku(); 
    } 
} 

我没有看到输出在第一,因为它下面的所有相关产品和向上销售等

此外,你可能想切换到wc_get_product(),而不是试图直接调用的类。以下列出了产品SKU。您应该使用if($loop->have_posts())打开<ul>,但我很懒。

$loop = new WP_Query(array('post_type' => array('product', 'product_variation'), 'posts_per_page' => -1)); 

while ($loop->have_posts()) : $loop->the_post(); 
    $theid = get_the_ID(); 
    $product = wc_get_product($theid); 

    if($product->get_sku()) echo '<li>' . $product->get_sku() . '</li>'; 
endwhile; 
+0

我删除了functions.php文件中的内容,并添加到sku函数中,它工作。我不确定我之前在做什么,但是你的实现与我之前尝试过的没有什么不同。它一定是事物在php文件中的顺序。 Anway,我把所有东西都加回来了,现在它正在工作。谢谢! – brad14

+0

也许你在你的功能中有其他的东西搞砸了它。有时你必须回到一个空白文件来整理它。 :) – helgatheviking

相关问题