diff --git a/admin/post-types/writepanels/writepanel-product_data.php b/admin/post-types/writepanels/writepanel-product_data.php index 6eda70c6eec..43c1d45104b 100644 --- a/admin/post-types/writepanels/writepanel-product_data.php +++ b/admin/post-types/writepanels/writepanel-product_data.php @@ -103,6 +103,15 @@ function woocommerce_product_data_box() { echo ''; + echo '
'; + + // Individual product + woocommerce_wp_checkbox( array( 'id' => '_sold_individually', 'wrapper_class' => 'show_if_simple show_if_variable', 'label' => __('Product Sold Individually?', 'woocommerce'), 'description' => __('For items of singular quantity.', 'woocommerce') ) ); + + do_action('woocommerce_product_options_sold_individually'); + + echo '
'; + echo '
'; // External URL @@ -824,6 +833,13 @@ function woocommerce_process_product_meta( $post_id, $post ) { $woocommerce->clear_product_transients( $post_parent ); } + // Sold Individuall + if ( ! empty( $_POST['_sold_individually'] ) ) { + update_post_meta( $post_id, '_sold_individually', 'yes' ); + } else { + update_post_meta( $post_id, '_sold_individually', '' ); + } + // Stock Data if ( get_option('woocommerce_manage_stock') == 'yes' ) { diff --git a/classes/class-wc-product.php b/classes/class-wc-product.php index 05a6fc35190..a50caa673ee 100644 --- a/classes/class-wc-product.php +++ b/classes/class-wc-product.php @@ -435,8 +435,8 @@ class WC_Product { function is_sold_individually() { $return = false; - // Sold individually if downloadable, virtual, and the option is enabled - if ( $this->is_downloadable() && $this->is_virtual() && get_option('woocommerce_limit_downloadable_product_qty') == 'yes' ) { + // Sold individually if downloadable, virtual, and the option is enabled OR if intentionally a singular item + if ( 'yes' == get_post_meta( $this->id, '_sold_individually', true ) || ( $this->is_downloadable() && $this->is_virtual() && get_option('woocommerce_limit_downloadable_product_qty') == 'yes' ) ) { $return = true; }