在 WooCommerce 的单个产品页面上隐藏某些产品的产品库存
Hide product stock for certain products on single product pages in WooCommerce
我尝试添加一个选项来隐藏产品库存信息,但仅限于某些单个产品页面。
我们不想为每个产品隐藏此信息。我们希望在产品编辑视图中有一个选项,如果当前产品应该是这种情况,我们可以在其中 select。
不幸的是,我下面的代码不能完全正常工作。没有致命错误,但当复选框处于 selected 时,代码不会隐藏产品的库存信息。
这是我目前拥有的:
// Add checkbox
function action_woocommerce_hide_product_stock_info() {
// Checkbox
woocommerce_wp_checkbox( array(
'id' => '_hide_stock_status', // Required, it's the meta_key for storing the value (is checked or not)
'label' => __( 'Hide product stock info', 'woocommerce' ), // Text in the editor label
'desc_tip' => false, // true or false, show description directly or as tooltip
'description' => __( 'Dont show product stock info on product page', 'woocommerce' ) // Provide something useful here
) );
}
add_action( 'woocommerce_product_options_inventory_product_data', 'action_woocommerce_hide_product_stock_info', 10, 0 );
// Save Field
function action_woocommerce_hide_product_stock_info_object( $product ) {
// Isset, yes or no
$checkbox = isset( $_POST['_hide_stock_status'] ) ? 'yes' : 'no';
// Update meta
$product->update_meta_data( '_hide_stock_status', $checkbox );
}
add_action( 'woocommerce_admin_process_product_object', 'action_woocommerce_hide_product_stock_info_object', 10, 1 );
// Hide stock info on product page
function filter_woocommerce_hide_product_stock( $html, $text, $product ) {
// Get meta
$hide_product_stock_info = $product->get_meta( '_hide_stock_status' );
// Compare
if ( $hide_product_stock_info == 'yes' ) {
// Hide product stock info
if ( isset( $availability['class'] ) && 'in-stock' === $availability['class'] ) {
return '';
}
return $html;
}
}
add_filter( 'woocommerce_stock_html', 'filter_woocommerce_hide_product_stock', 10, 2 );
有什么建议吗?
// Compare
if ( $hide_product_stock_info == 'yes' ) {
我不太确定 WordPress 如何保存复选框值,但我可以想象它宁愿是 'true' 或 'false' 而不是 'yes'。这意味着您可以省略比较并只使用:
// Compare
if ( $hide_product_stock_info) {
此外,我确定您在共享的代码周围有一些包含函数,但您目前正在 return $html;
之后使用额外的结束赞誉“}”。
您的代码包含一些错误
woocommerce_stock_html
过滤器已弃用。使用 woocommerce_get_stock_html
代替
$availability
未定义
- 函数的参数太少
filter_woocommerce_hide_product_stock()
,传入了 2 个...而正好是 3 个预期
因此将代码的第三部分替换为:
// Hide stock info on product page
function filter_woocommerce_get_stock_html( $html, $product ) {
// Get meta
$hide_product_stock_info = $product->get_meta( '_hide_stock_status' );
// Compare
if ( $hide_product_stock_info == 'yes' ) {
$html = '';
}
return $html;
}
add_filter( 'woocommerce_get_stock_html', 'filter_woocommerce_get_stock_html', 10, 2 );
可选:在你的问题中没有提到,但如果你仍然想扩展基于$availability
的功能,你可以添加如下内容:
// Get availability
$availability = $product->get_availability();
// Condition
if ( ! empty( $availability['availability'] ) && $availability['class'] == 'in-stock' ) {
$html = '';
}
我尝试添加一个选项来隐藏产品库存信息,但仅限于某些单个产品页面。
我们不想为每个产品隐藏此信息。我们希望在产品编辑视图中有一个选项,如果当前产品应该是这种情况,我们可以在其中 select。
不幸的是,我下面的代码不能完全正常工作。没有致命错误,但当复选框处于 selected 时,代码不会隐藏产品的库存信息。
这是我目前拥有的:
// Add checkbox
function action_woocommerce_hide_product_stock_info() {
// Checkbox
woocommerce_wp_checkbox( array(
'id' => '_hide_stock_status', // Required, it's the meta_key for storing the value (is checked or not)
'label' => __( 'Hide product stock info', 'woocommerce' ), // Text in the editor label
'desc_tip' => false, // true or false, show description directly or as tooltip
'description' => __( 'Dont show product stock info on product page', 'woocommerce' ) // Provide something useful here
) );
}
add_action( 'woocommerce_product_options_inventory_product_data', 'action_woocommerce_hide_product_stock_info', 10, 0 );
// Save Field
function action_woocommerce_hide_product_stock_info_object( $product ) {
// Isset, yes or no
$checkbox = isset( $_POST['_hide_stock_status'] ) ? 'yes' : 'no';
// Update meta
$product->update_meta_data( '_hide_stock_status', $checkbox );
}
add_action( 'woocommerce_admin_process_product_object', 'action_woocommerce_hide_product_stock_info_object', 10, 1 );
// Hide stock info on product page
function filter_woocommerce_hide_product_stock( $html, $text, $product ) {
// Get meta
$hide_product_stock_info = $product->get_meta( '_hide_stock_status' );
// Compare
if ( $hide_product_stock_info == 'yes' ) {
// Hide product stock info
if ( isset( $availability['class'] ) && 'in-stock' === $availability['class'] ) {
return '';
}
return $html;
}
}
add_filter( 'woocommerce_stock_html', 'filter_woocommerce_hide_product_stock', 10, 2 );
有什么建议吗?
// Compare
if ( $hide_product_stock_info == 'yes' ) {
我不太确定 WordPress 如何保存复选框值,但我可以想象它宁愿是 'true' 或 'false' 而不是 'yes'。这意味着您可以省略比较并只使用:
// Compare
if ( $hide_product_stock_info) {
此外,我确定您在共享的代码周围有一些包含函数,但您目前正在 return $html;
之后使用额外的结束赞誉“}”。
您的代码包含一些错误
woocommerce_stock_html
过滤器已弃用。使用woocommerce_get_stock_html
代替$availability
未定义- 函数的参数太少
filter_woocommerce_hide_product_stock()
,传入了 2 个...而正好是 3 个预期
因此将代码的第三部分替换为:
// Hide stock info on product page
function filter_woocommerce_get_stock_html( $html, $product ) {
// Get meta
$hide_product_stock_info = $product->get_meta( '_hide_stock_status' );
// Compare
if ( $hide_product_stock_info == 'yes' ) {
$html = '';
}
return $html;
}
add_filter( 'woocommerce_get_stock_html', 'filter_woocommerce_get_stock_html', 10, 2 );
可选:在你的问题中没有提到,但如果你仍然想扩展基于$availability
的功能,你可以添加如下内容:
// Get availability
$availability = $product->get_availability();
// Condition
if ( ! empty( $availability['availability'] ) && $availability['class'] == 'in-stock' ) {
$html = '';
}