I try to add a option to hide the product stock info but only on certain single product pages.
We do not want to hide this info for every product. We want to have a option in the product edit view where we can select if this should be the case for that current product.
Unfortunately my code below is not fully working. No fatal error but the code does not hide the stock info for a product when the checkbox is selected.
This is what I have so far:
// 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 );
Any advice?
2
Answers
I’m not quite sure how WordPress saves checkbox values, but I can imagine it would rather be ‘true’ or ‘false’ instead of ‘yes’. Which means you could omit the comparison and just use:
Also, I’m sure you’ve got some containing function around the code you’ve shared, but you’re currently working with an additional closing accolade ‘}’ after
return $html;
.Your code contains some mistakes
woocommerce_stock_html
filter is deprecated. Usewoocommerce_get_stock_html
instead$availability
is not definedfilter_woocommerce_hide_product_stock()
, 2 passed in … and exactly 3 expectedSo replace the 3rd part of your code with:
Optional: not mentioned in your question but if you still want to extend the function based on
$availability
, you can add something like: