php - WooCommerce:如何检查特定产品是否存在元 key

标签 php wordpress function methods woocommerce

情况:修改产品模板以仅在特定产品元存在/已设置/大于零时显示某些 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/

相关文章:

html - 如何定位表单文本标签?

function - Neovim 中的 ALE Fixer 配置

c++ - 在 C++ 中将数组作为函数参数传递

php - Symfony 无法为池分配内存

php - 使用 PHP 存储视频时出现未定义索引错误

php - WordPress sha 256登录

css - 如何显示特定的 css 样式 wp_nav_menu()

iphone - 从我的应用程序中打开其他已安装的应用程序

php - PHP uniqid()源码相关问题

php - 重用 php 类变量