如何实现WooCommerce按SKU显示产品价格的短代码
WooCommerce 根据SKU显示价格的短代码实现
问题说明
想要通过短代码[woocommerce_price sku="sku123"]在页面中根据产品SKU显示对应价格,但自行编写的代码无法正常运行,原代码如下:
extract( shortcode_atts( array( 'sku' => null, ), $atts, 'woocommerce_price' ) ); if( intval( $sku ) > 0 && function_exists( 'wc_get_product' ) ){ $product = wc_get_product_id_by_sku( $sku ); if ( $product->get_price() > 0 ) { return $product->get_price_html(); } else { return __( "Price unavailable", "woocommerce" ); } } } add_shortcode( 'woocommerce_price', 'wc_price_shortcode_callback' );
原代码的问题
- 缺失函数定义开头:短代码回调函数
wc_price_shortcode_callback没有声明function关键字和参数 - SKU判断逻辑错误:用
intval($sku) > 0会过滤掉非数字格式的SKU,不符合实际使用场景 - 产品对象处理错误:
wc_get_product_id_by_sku返回的是产品ID,不是产品对象,直接调用get_price()会报错 - 缺少产品存在性校验:如果SKU无效,未处理
$product为false的情况,会引发错误
修正后的代码
function wc_price_shortcode_callback( $atts ) { // 解析短代码参数 $atts = shortcode_atts( array( 'sku' => '', ), $atts, 'woocommerce_price' ); // 检查SKU是否为空,以及WooCommerce函数是否存在 if ( empty( $atts['sku'] ) || !function_exists( 'wc_get_product' ) ) { return __( "Price unavailable", "woocommerce" ); } // 通过SKU获取产品ID,再转为产品对象 $product_id = wc_get_product_id_by_sku( $atts['sku'] ); $product = wc_get_product( $product_id ); // 检查产品是否存在且价格有效 if ( $product && $product->get_price() > 0 ) { return $product->get_price_html(); } else { return __( "Price unavailable", "woocommerce" ); } } add_shortcode( 'woocommerce_price', 'wc_price_shortcode_callback' );
使用方法
直接在页面、文章或自定义内容中插入短代码即可:
- 示例1:
[woocommerce_price sku="sku123"] - 示例2:
[woocommerce_price sku="abc-456"]
注意事项
- 代码需添加到主题的
functions.php文件,或使用自定义代码插件(如Code Snippets) - 确保WooCommerce已激活,否则短代码会返回"Price unavailable"
内容的提问来源于stack exchange,提问作者Lucas
相关产品推荐
相关产品推荐

