Plugin Directory

Changeset 3251737


Ignore:
Timestamp:
03/06/2025 01:26:05 PM (13 months ago)
Author:
saffiretech
Message:

Added checkbox to discontinue simple products in the Discontinued Products tab.

Location:
discontinued-product-stock-status-woocommerce
Files:
139 added
6 edited

Legend:

Unmodified
Added
Removed
  • discontinued-product-stock-status-woocommerce/trunk/assets/js/discontinued.js

    r3083405 r3251737  
    3333    }).trigger('change');
    3434
    35 
     35     
    3636    jQuery('select#product-type').change(function () {
    3737        productType = jQuery(this).val();
    3838
    39         if ('variable' == productType || 'grouped' == productType) {
     39        if ('variable' == productType || 'grouped' == productType || 'simple' === productType) {
    4040            jQuery('input#_discontinued_product').parent().show();
    4141        } else {
     
    4444    });
    4545    jQuery('select#product-type').trigger('change');
    46 
    47     // To hide and show message box on variable product level. i.e when checked on 'Discontinued Product'.
    48     jQuery('input#_discontinued_product').on('change', function () {
    49 
    50         var is_discontinued_product = jQuery('input#_discontinued_product:checked').size();
    51         variElements = jQuery(this).parent().siblings();
    52         productType = jQuery('select#product-type').val();
    53 
    54 
    55         if (is_discontinued_product) {
    56             // if (is_discontinued_product) {
    57 
    58             jQuery(this).parent().siblings('p.form-field.show_specific_messsage_field').show();
    59             jQuery(this).parent().siblings('div#wp-custom_editor_box-wrap').show();
    60 
    61             let prodType = variElements.find('select#show_specific_messsage').val();
    62 
    63             if ('product_specific_message' == prodType) {
    64 
    65                 jQuery(this).parent().siblings('div#wp-custom_editor_box-wrap').show();
    66             } else {
    67                 jQuery(this).parent().siblings('div#wp-custom_editor_box-wrap').hide();
    68             }
    69         } else if ('simple' != productType) {
    70 
    71             jQuery(this).parent().siblings('p.form-field.show_specific_messsage_field').hide();
    72             jQuery(this).parent().siblings('div#wp-custom_editor_box-wrap').hide();
    73 
    74         }
    75 
    76     }).trigger('change');
    7746
    7847    // To hide and show message box on variable product level. i.e when checked on 'Discontinued Product'.
     
    175144    stockStatus = jQuery('#_stock_status').val();
    176145    var savedStkStatus = stockStatus;
    177 
     146     
    178147    // Swapping between different Product types.
    179148    if ( 'simple' === productType ) {
     
    193162    }
    194163
     164     
     165    // To hide and show message box on variable product level. i.e when checked on 'Discontinued Product'.
     166    jQuery('input#_discontinued_product').on('change', function () {
     167        var is_discontinued_product = jQuery('input#_discontinued_product:checked').size();
     168        variElements = jQuery(this).parent().siblings();
     169        productType = jQuery('select#product-type').val();
     170       
     171        if (is_discontinued_product) {
     172            // if (is_discontinued_product) {
     173            jQuery(this).parent().siblings('p.form-field.show_specific_messsage_field').show();
     174            jQuery(this).parent().siblings('p.form-field.related_product_header_field').show();
     175            jQuery(this).parent().siblings('p.form-field.related_to_disc_prod_field').show();
     176            jQuery(this).parent().siblings('div#wp-custom_editor_box-wrap').show();
     177
     178            let prodType = variElements.find('select#show_specific_messsage').val();
     179
     180            if ('product_specific_message' == prodType) {
     181
     182                jQuery(this).parent().siblings('div#wp-custom_editor_box-wrap').show();
     183            } else {
     184                jQuery(this).parent().siblings('div#wp-custom_editor_box-wrap').hide();
     185            }
     186        } else {
     187            console.log('else');
     188            jQuery(this).parent().siblings('p.form-field.show_specific_messsage_field').hide();
     189            jQuery(this).parent().siblings('div#wp-custom_editor_box-wrap').hide();
     190            jQuery(this).parent().siblings('p.form-field.related_product_header_field').hide();
     191            jQuery(this).parent().siblings('p.form-field.related_to_disc_prod_field').hide();
     192
     193        }
     194
     195    }).trigger('change');
     196
     197     
    195198    jQuery('#_stock_status').on('change', function () {
    196199
    197200        var stockStatus = '';
    198201        stockStatus = jQuery('#_stock_status').val();
     202        console.log('stock status fired');
    199203
    200204        if ( 'discontinued' === stockStatus ) {
    201             jQuery("#_discontinued_product").prop("checked", true);
     205            jQuery("#_discontinued_product").prop("checked", true).trigger('change');
    202206        } else {
    203207            jQuery("#_discontinued_product").prop("checked", false);
     
    205209    });
    206210
     211     
    207212    jQuery('#_discontinued_product').on('change', function () {
    208213
     
    212217            jQuery("#_stock_status").val("discontinued");
    213218        } else {
    214             jQuery("#_stock_status").val(savedStkStatus);
     219            if ( stockStatus === savedStkStatus && 'discontinued' === savedStkStatus ) {
     220                jQuery("#_stock_status").val('outofstock');
     221            } else {
     222                jQuery("#_stock_status").val(savedStkStatus);
     223            }
    215224        }
    216225    });
    217226   
    218     // Hide all the Settings on Discontinued Checkbox from Discontinued Products for Variable Products.
    219     if ( ( 'discontinued' === stockStatus ) && ( jQuery('#_discontinued_product').is(":checked") ) ) {
    220         jQuery('#show_specific_messsage').parent().show();
    221         jQuery('#related_product_header').parent().show();
    222         jQuery('#related_to_disc_prod').parent().show();
    223     } else {
    224         if ( 'simple' === productType ) {
    225             jQuery('#show_specific_messsage').parent().show();
    226         } else {
    227             jQuery('#show_specific_messsage').parent().hide();
    228         }
    229         jQuery('#related_product_header').parent().hide();
    230         jQuery('#related_to_disc_prod').parent().hide();
    231     }
    232 
    233227    // Validation based on changing the Product type.
    234228    jQuery('#product-type').on('change', function () {
     
    252246            }
    253247        }
    254 
    255         if ( ( 'discontinued' === stockStatus ) && ( jQuery('#_discontinued_product').is(":checked") ) ) {
     248    });
     249
     250     
     251    // Validation for Hiding and Showing settings for Simple Product.
     252    jQuery('#_stock_status').on('change', function () {
     253
     254        var stockStatus = '';
     255        stockStatus = jQuery('#_stock_status').val();
     256
     257        if ( 'discontinued' === stockStatus ) {
    256258            jQuery('#show_specific_messsage').parent().show();
    257259            jQuery('#related_product_header').parent().show();
    258260            jQuery('#related_to_disc_prod').parent().show();
    259            
    260         } else {
    261             if ( 'simple' === productType ) {
    262                 jQuery('#show_specific_messsage').parent().show();
     261
     262            let prodType = jQuery('select#show_specific_messsage').val();
     263
     264            if ('product_specific_message' == prodType) {
     265                jQuery('div#wp-custom_editor_box-wrap').show();
    263266            } else {
    264                 jQuery('#show_specific_messsage').parent().hide();
    265             }
     267                jQuery('div#wp-custom_editor_box-wrap').hide();
     268            }
     269
     270        } else {
     271            jQuery('#show_specific_messsage').parent().hide();
    266272            jQuery('#related_product_header').parent().hide();
    267273            jQuery('#related_to_disc_prod').parent().hide();
    268         }
    269     });
    270 
    271     // Validation for Hiding and Showing settings for Simple Product.
    272     jQuery('#_stock_status').on('change', function () {
    273 
    274         var stockStatus = '';
    275         stockStatus = jQuery('#_stock_status').val();
    276 
    277         if ( 'discontinued' === stockStatus ) {
    278             jQuery('#related_product_header').parent().show();
    279             jQuery('#related_to_disc_prod').parent().show();
    280         } else {
    281             jQuery('#related_product_header').parent().hide();
    282             jQuery('#related_to_disc_prod').parent().hide();
     274            jQuery('div#wp-custom_editor_box-wrap').hide();
    283275        }
    284276
     
    287279    // Validation for Hiding and Showing settings for non-Simple Product (like Variable and Grouped).
    288280    jQuery('#_discontinued_product').on('change', function () {
    289 
    290281        if ( jQuery('#_discontinued_product').is(":checked") ) {
    291282            jQuery('#show_specific_messsage').parent().show();
     
    300291    });
    301292
    302     // Hide Header Text Field and Dropdown field of Similar Products on Add Similar Products Checbox.
    303     if ( 'discontinued' === stockStatus  &&  jQuery('#_discontinued_product').is(":checked")  ) {
    304         jQuery('#related_product_header').parent().show();
    305         jQuery('#related_to_disc_prod').parent().show();
    306     } else {
    307         jQuery('#related_product_header').parent().hide();
    308         jQuery('#related_to_disc_prod').parent().hide();
    309     }
    310293
    311294    jQuery("#related_product_header").attr('disabled', 'disabled');
  • discontinued-product-stock-status-woocommerce/trunk/discontinued-products-stock-status.php

    r3234439 r3251737  
    77 * Text Domain: discontinued-products-stock-status
    88 * Domain Path: /languages
    9  * Stable Tag : 1.5.3
     9 * Stable Tag : 1.5.4
    1010 * Requires at least: 5.0
    1111 * Tested up to: 6.7.1
     
    1414 * License:    GPLv3
    1515 * License URI: https://www.gnu.org/licenses/gpl-3.0.html
    16  * Version: 1.5.3
     16 * Version: 1.5.4
    1717 */
    1818
  • discontinued-product-stock-status-woocommerce/trunk/includes/dpssw-functions.php

    r3234439 r3251737  
    5959function dpssw_apply_greyscale_effect_on_discontinued_products() {
    6060    global $product;
     61    // check for empty product.
    6162    if ( ! empty( $product ) ) {
    6263        $product_id = $product->get_id(); // gets product id.
     
    179180 */
    180181function dpssw_hide_price_discontinued_variations( $condition, $product, $variation ) {
    181     if ( $variation->get_stock_status() === 'discontinued' ) {
    182         return false;
     182    // check for empty variation product.
     183    if ( ! empty( $variation ) ) {
     184        if ( $variation->get_stock_status() === 'discontinued' ) {
     185            return false;
     186        } else {
     187            return true;
     188        }
    183189    } else {
    184190        return true;
     
    210216        foreach ( $product->get_visible_children() as $variation_id ) {
    211217            get_stock_discontinued_status( $variation_id );  // update the stock status.
    212             $variation    = wc_get_product( $variation_id ); // Get product.
    213             $stock_status = $variation->get_stock_status(); // Get stock status.
     218            $variation = wc_get_product( $variation_id ); // Get product.
     219            if ( ! empty( $variation ) ) {
     220                $stock_status = $variation->get_stock_status(); // Get stock status.
     221            }
    214222        }
    215223    }
     
    288296
    289297    global $post;
     298    // check for empty post.
    290299    if ( empty( $post ) ) {
    291300        return '';
     
    336345 */
    337346function dpssw_hide_price_discontinued_grouped( $price, $product, $child_prices ) {
     347    // check for empty product.
    338348    if ( empty( $product ) ) {
    339349        return $price;
     
    358368
    359369    global $product;
     370    // check for empty product.
    360371    if ( ! empty( $product ) ) {
    361372        $product_id = $product->get_id(); // gets product id.
  • discontinued-product-stock-status-woocommerce/trunk/includes/dpssw-product-data-tabs.php

    r3234439 r3251737  
    848848function dpssw_save_discontinued_product_option_fields( $post_id ) {
    849849    $product = wc_get_product( $post_id ); // product object.
     850    // check for empty product.
    850851    if ( empty( $product ) ) {
    851852        return '';
     
    952953function dpssw_add_wc_discontinued_variation_data( $data, $product, $variation ) {
    953954
    954     if ( $variation->get_stock_status() === 'discontinued' ) {
    955 
    956         $variation_id           = $variation->get_id();
    957         $message                = '';
    958         $message_type           = get_post_meta( $variation_id, '_discontinued_messsage_type', true );
    959         $custom_message_disable = get_option( 'discontinued_enable_custom_message' );
    960         $message                = ! empty( get_option( 'discontinued_global_message' ) ) ? get_option( 'discontinued_global_message' ) : __( 'This product has been discontinued.', 'discontinued-products-stock-status' );
    961 
    962         if ( 'yes' === $custom_message_disable ) {
    963 
    964             if ( 'variations_specific_message' === $message_type ) {
    965                 $variation_message = get_post_meta( $variation_id, '_variable_discontinued_textarea', true );
    966                 $message           = ! empty( $variation_message ) ? $variation_message : $message;
    967                 // If variation_message is empty then by default global message is rendered.
    968                 if ( ! empty( $variation_message ) ) {
    969                     $message_html = '<div class=discontinued_status_message>' . esc_attr( $message ) . '</div>';
    970                 } else {
     955    if ( ! empty( $variation ) ) {
     956        if ( $variation->get_stock_status() === 'discontinued' ) {
     957
     958            $variation_id           = $variation->get_id();
     959            $message                = '';
     960            $message_type           = get_post_meta( $variation_id, '_discontinued_messsage_type', true );
     961            $custom_message_disable = get_option( 'discontinued_enable_custom_message' );
     962            $message                = ! empty( get_option( 'discontinued_global_message' ) ) ? get_option( 'discontinued_global_message' ) : __( 'This product has been discontinued.', 'discontinued-products-stock-status' );
     963
     964            if ( 'yes' === $custom_message_disable ) {
     965
     966                if ( 'variations_specific_message' === $message_type ) {
     967                    $variation_message = get_post_meta( $variation_id, '_variable_discontinued_textarea', true );
     968                    $message           = ! empty( $variation_message ) ? $variation_message : $message;
     969                    // If variation_message is empty then by default global message is rendered.
     970                    if ( ! empty( $variation_message ) ) {
     971                        $message_html = '<div class=discontinued_status_message>' . esc_attr( $message ) . '</div>';
     972                    } else {
     973                        $message_html = '<div class=discontinued_status_message>' . esc_attr( $message ) . '</div>';
     974                    }
     975                } elseif ( 'global_text_message' === $message_type ) { // This will work when message_type is 'global_text_message'.
    971976                    $message_html = '<div class=discontinued_status_message>' . esc_attr( $message ) . '</div>';
    972977                }
    973             } elseif ( 'global_text_message' === $message_type ) { // This will work when message_type is 'global_text_message'.
     978            } else { // This will work when custom_message_disable is 'yes'. Global message will be overridden.
    974979                $message_html = '<div class=discontinued_status_message>' . esc_attr( $message ) . '</div>';
    975980            }
    976         } else { // This will work when custom_message_disable is 'yes'. Global message will be overridden.
    977             $message_html = '<div class=discontinued_status_message>' . esc_attr( $message ) . '</div>';
     981
     982            $data['availability_html'] = apply_filters( 'dpssw_customize_variation_product_message', $message_html ); // modify the variation product message.
     983
    978984        }
    979 
    980         $data['availability_html'] = apply_filters( 'dpssw_customize_variation_product_message', $message_html ); // modify the variation product message.
    981 
    982985    }
    983986    return $data;
     
    994997    $product_id = $post->ID;
    995998    $product    = wc_get_product( $product_id );
     999    // check for empty product.
    9961000    if ( empty( $product ) ) {
    9971001        return '';
     
    10381042function dpssw_save_custom_stock_status( $product_id ) {
    10391043    $product = wc_get_product( $product_id ); // product object.
    1040     if ( empty( $product ) ) {
    1041         return '';
    1042     }
    10431044
    10441045    // save stock status for simple product.
     
    10461047
    10471048        update_post_meta( $product_id, '_stock_status', wc_clean( sanitize_text_field( wp_unslash( $_POST['_stock_status'] ) ) ) );
    1048         $product->set_stock_status( wc_clean( sanitize_text_field( wp_unslash( $_POST['_stock_status'] ) ) ) );
    1049         $product->save();
     1049        // check for empty product.
     1050        if ( ! empty( $product ) ) {
     1051            $product->set_stock_status( wc_clean( sanitize_text_field( wp_unslash( $_POST['_stock_status'] ) ) ) );
     1052            $product->save();
     1053        }
    10501054    }
    10511055}
     
    10621066 */
    10631067function dpssw_woocommerce_admin_stock_html( $stock_html, $product ) {
     1068    // check for empty product.
    10641069    if ( empty( $product ) ) {
    10651070        return $stock_html;
     
    14041409    // Get the product variation object
    14051410    $variation = wc_get_product( $variation_id );
    1406 
    1407     // saves variation product option data.
    1408     if ( isset( $variable_discontinued_option ) ) {
    1409         update_post_meta( $variation_id, '_stock_discontinued_product', 'yes' );
    1410         $stock_quantity = $variation->get_stock_quantity();
    1411 
    1412         if ( $stock_quantity == 0 ) {
    1413             update_post_meta( $variation_id, '_stock_status', 'discontinued' );
     1411    // check if product variation is empty.
     1412    if ( ! empty( $variation ) ) {
     1413        // saves variation product option data.
     1414        if ( isset( $variable_discontinued_option ) ) {
     1415            update_post_meta( $variation_id, '_stock_discontinued_product', 'yes' );
     1416            $stock_quantity = $variation->get_stock_quantity();
     1417
     1418            if ( $stock_quantity == 0 ) {
     1419                update_post_meta( $variation_id, '_stock_status', 'discontinued' );
     1420            }
     1421        } else {
     1422            update_post_meta( $variation_id, '_stock_discontinued_product', '' );
     1423
     1424            if ( $variation && $variation->is_type( 'variation' ) ) {
     1425                // Get stock status.
     1426                $stock_status = $variation->get_stock_status(); // 'instock', 'outofstock', 'onbackorder'
     1427                update_post_meta( $variation_id, '_stock_status', $stock_status );
     1428            } else {
     1429                update_post_meta( $variation_id, '_stock_status', '' );
     1430
     1431            }
    14141432        }
    1415     } else {
    1416         update_post_meta( $variation_id, '_stock_discontinued_product', '' );
    1417 
    1418         if ( $variation && $variation->is_type( 'variation' ) ) {
    1419             // Get stock status.
    1420             $stock_status = $variation->get_stock_status(); // 'instock', 'outofstock', 'onbackorder'
    1421             update_post_meta( $variation_id, '_stock_status', $stock_status );
    1422         } else {
    1423             update_post_meta( $variation_id, '_stock_status', '' );
    1424 
    1425         }
    1426     }
     1433    }
     1434
    14271435}
    14281436
     
    14351443 */
    14361444function dpssw_custom_bulk_edit_save_action( $product ) {
     1445    // check for empty product.
    14371446    if ( empty( $product ) ) {
    14381447        return '';
     
    14621471                    // Get an instance of the WC_Product object.
    14631472                    $product = wc_get_product( $product_id );
    1464 
    1465                     // Get product stock quantity and stock status.
    1466                     $stock_quantity = $product->get_stock_quantity();
    1467                     $stock_status   = $product->get_stock_status();
    1468 
    1469                     // Set product stock quantity (zero) and stock status (out of stock).
    1470                     $product->set_stock_quantity( 0 );
    1471                     $product->set_stock_status( 'outofstock' );
    1472 
    1473                     // Save the data and refresh caches.
    1474                     $product->save();
     1473                    // check for empty product.
     1474                    if ( ! empty( $product ) ) {
     1475                        // Get product stock quantity and stock status.
     1476                        // $stock_quantity = $product->get_stock_quantity();
     1477                        // $stock_status   = $product->get_stock_status();
     1478
     1479                        // Set product stock quantity (zero) and stock status (out of stock).
     1480                        $product->set_stock_quantity( 0 );
     1481                        $product->set_stock_status( 'outofstock' );
     1482
     1483                        // Save the data and refresh caches.
     1484                        $product->save();
     1485                    }
    14751486                }
    14761487            }
  • discontinued-product-stock-status-woocommerce/trunk/languages/discontinued-products-stock-status.pot

    r3234439 r3251737  
    33msgid ""
    44msgstr ""
    5 "Project-Id-Version: Discontinued Product Stock Status for WooCommerce 1.5.3\n"
     5"Project-Id-Version: Discontinued Product Stock Status for WooCommerce 1.5.4\n"
    66"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/discontinued-product-stock-status-woocommerce\n"
    77"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
     
    1010"Content-Type: text/plain; charset=UTF-8\n"
    1111"Content-Transfer-Encoding: 8bit\n"
    12 "POT-Creation-Date: 2025-02-04T06:30:43+00:00\n"
     12"POT-Creation-Date: 2025-03-06T13:01:07+00:00\n"
    1313"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
    1414"X-Generator: WP-CLI 2.11.0\n"
     
    135135msgstr ""
    136136
    137 #: includes/dpssw-functions.php:305
    138 #: includes/dpssw-functions.php:311
    139 #: includes/dpssw-functions.php:400
    140 #: includes/dpssw-functions.php:409
    141 #: includes/dpssw-product-data-tabs.php:960
     137#: includes/dpssw-functions.php:314
     138#: includes/dpssw-functions.php:320
     139#: includes/dpssw-functions.php:411
     140#: includes/dpssw-functions.php:420
     141#: includes/dpssw-product-data-tabs.php:962
    142142msgid "This product has been discontinued."
    143143msgstr ""
    144144
    145 #: includes/dpssw-functions.php:531
     145#: includes/dpssw-functions.php:542
    146146msgid "Permission Denied."
    147147msgstr ""
    148148
    149 #: includes/dpssw-functions.php:576
     149#: includes/dpssw-functions.php:587
    150150msgid "Awesome, you've been using"
    151151msgstr ""
    152152
    153 #: includes/dpssw-functions.php:576
     153#: includes/dpssw-functions.php:587
    154154msgid "for more than 1 week"
    155155msgstr ""
    156156
    157 #: includes/dpssw-functions.php:577
     157#: includes/dpssw-functions.php:588
    158158msgid "If you like our plugin would you like to rate our plugin at WordPress.org ?"
    159159msgstr ""
    160160
    161 #: includes/dpssw-functions.php:579
     161#: includes/dpssw-functions.php:590
    162162msgid "Yes, I'd like to rate it!"
    163163msgstr ""
    164164
    165 #: includes/dpssw-functions.php:582
     165#: includes/dpssw-functions.php:593
    166166msgid "I already did!"
    167167msgstr ""
     
    490490
    491491#: includes/dpssw-product-data-tabs.php:799
    492 #: includes/dpssw-product-data-tabs.php:894
     492#: includes/dpssw-product-data-tabs.php:895
    493493msgid "Global Message"
    494494msgstr ""
     
    522522msgstr ""
    523523
    524 #: includes/dpssw-product-data-tabs.php:889
     524#: includes/dpssw-product-data-tabs.php:890
    525525msgid "Discontinued Message Type"
    526526msgstr ""
    527527
    528 #: includes/dpssw-product-data-tabs.php:895
     528#: includes/dpssw-product-data-tabs.php:896
    529529msgid "Variation Specific Message"
    530530msgstr ""
    531531
    532 #: includes/dpssw-product-data-tabs.php:898
     532#: includes/dpssw-product-data-tabs.php:899
    533533msgid "Choose type of message to be displayed for Discontinued product"
    534534msgstr ""
    535535
    536 #: includes/dpssw-product-data-tabs.php:907
     536#: includes/dpssw-product-data-tabs.php:908
    537537msgid "Discontinued description"
    538538msgstr ""
    539539
    540 #: includes/dpssw-product-data-tabs.php:1026
    541 #: includes/dpssw-product-data-tabs.php:1073
    542 #: includes/dpssw-product-data-tabs.php:1080
    543 #: includes/dpssw-product-data-tabs.php:1089
     540#: includes/dpssw-product-data-tabs.php:1030
     541#: includes/dpssw-product-data-tabs.php:1078
     542#: includes/dpssw-product-data-tabs.php:1085
     543#: includes/dpssw-product-data-tabs.php:1094
    544544msgid "Discontinued"
    545545msgstr ""
    546546
    547 #: includes/dpssw-product-data-tabs.php:1342
     547#: includes/dpssw-product-data-tabs.php:1347
    548548msgid "Mark this entire product as 'Discontinued' once it's stock becomes zero"
    549549msgstr ""
    550550
    551 #: includes/dpssw-product-data-tabs.php:1344
    552 #: includes/dpssw-product-data-tabs.php:1383
     551#: includes/dpssw-product-data-tabs.php:1349
     552#: includes/dpssw-product-data-tabs.php:1388
    553553msgid "Check this box if you want to set the stock status of this product to 'Discontinued' after stock quantity becomes zero."
    554554msgstr ""
    555555
    556 #: includes/dpssw-product-data-tabs.php:1381
     556#: includes/dpssw-product-data-tabs.php:1386
    557557msgid "Mark this variation as 'Discontinued' once it's stock becomes zero."
    558558msgstr ""
  • discontinued-product-stock-status-woocommerce/trunk/readme.txt

    r3234439 r3251737  
    55Tested up to: 6.7.1
    66Requires PHP: 7.2
    7 Stable tag: 1.5.3
     7Stable tag: 1.5.4
    88License: GPLv3
    99License URI: https://www.gnu.org/licenses/gpl-3.0.html
     
    7575
    7676== Changelog ==
     77= 1.5.4 2025-03-06 =
     78
     79* New - Added checkbox to discontinue simple products in the Discontinued Products tab.
     80
    7781= 1.5.3 2025-02-04 =
    7882
Note: See TracChangeset for help on using the changeset viewer.