情况:修改产品模板以仅在特定产品元存在/已设置/大于零时显示某些 HTML(它是附加价格类型,将为空或正整数)。
实际元是 WooCommerce“MSRP 价格”的 Booster,它作为元字段添加。
所以这有效: echo do_shortcode( '[wcj_product_meta name="_wcj_msrp"]' );
但我只想在相关产品确实设置了建议零售价(并非商店中的所有产品都有)时才显示它。对此的测试可以是“非空”、“已设置”或“大于零”。
尝试以下语法:
<?php if ($product ->metadata_exists(_wcj_msrp)) {
echo '<li class="single-product-price price-msrp">MSRP: <span>$</span>';
echo do_shortcode( '[wcj_product_meta name="_wcj_msrp"]' );
echo '</li>';
}
?>
结果:页面无限加载。
我错过的简单愚蠢的事情是什么?
最佳答案
第一个 metadata_exist()
是一个 WordPress 条件函数,但不是 WC_Product
方法(或继承的 WC_Data
方法)。这就是为什么您的代码不起作用,因为您没有使用 metadata_exist()
以正确的方式,因为该函数需要 3 个参数,并且不能用作 WC_Product
对象上的方法。
假设您的短代码工作正常,并且 WC_Product
对象已定义且可访问。 您有两种可能性来检查产品是否存在元 key (位于wp_postmeta
表中):
1) 使用 WooCommerce WC_Data
meta_exist()
(有条件)这样的方法:
<?php if ( $product->meta_exists( '_wcj_msrp' ) ) {
echo '<li class="single-product-price price-msrp">MSRP: <span>$</span>';
echo do_shortcode( '[wcj_product_meta name="_wcj_msrp"]' );
echo '</li>';
} ?>
2) 使用metadata_exist()
WordPress 条件函数是这样的:
<?php if ( metadata_exists( 'post', $product->get_id(), '_wcj_msrp' ) ) {
echo '<li class="single-product-price price-msrp">MSRP: <span>$</span>';
echo do_shortcode( '[wcj_product_meta name="_wcj_msrp"]' );
echo '</li>';
} ?>
两者都应该有效。
关于php - WooCommerce:如何检查特定产品是否存在元 key ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57650042/