Woocommerce 在 functions.php 中获取单个产品页面的产品 sku

Woocommerce get product sku for single product page in functions.php

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

我已经尝试了很多东西。常见的解决方案似乎是:

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

但这不起作用。由于某种原因,functions.php 脚本中的 $product 变量为空。

我的循环遍历所有产品 post 并获取 post 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);

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() 而不是尝试直接调用 class。通过以下内容,我得到了产品 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;