Search code examples
phpwordpresswoocommerce

How to Create a Custom WooCommerce Settings Page for Bulk Discount Application with 400 Bad Request Error?


I am trying to create a custom settings page for my WooCommerce-based site to apply bulk discounts to products within specified categories and brands for a defined date range. However, I'm encountering an issue where the form redirects to /wp-admin/admin-post.php and returns a 400 Bad Request error.

I've enabled DEBUG mode, but there are no error messages displayed in the logs. The only indication of an issue is a 'WordPress Error' title in the browser. Result Page; result page

Here are some details about what I've implemented:

  • The form structure and fields
  • How I'm processing the form submission
  • Any relevant code snippets

SettingsPage;

if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly
class StoreSettingsPage {

private $onsale;

public function __construct()
{
    add_action( 'admin_menu', array( $this, 'wootemasi_store_settings_page' ) );
    add_action( 'admin_init', array( $this, 'store_init' ) );
    
    add_action('admin_post_save_wootemasi_onsale_settings', array($this, 'save_settings'));
}

public function wootemasi_store_settings_page() {
    add_submenu_page( 
        'wootemasi-settings', 
        __('Toplu Ürün Yönetimi', 'wootemasi'),
        __('Ürün Yönetimi', 'wootemasi'),
        'manage_options', 
        'wootemasi-store-settings', 
        array($this, 'wootemasi_store_page')
    ); 
}

public function wootemasi_store_page() {
    
    // Check required user capability
    if ( !current_user_can( 'manage_options' ) )  {
        wp_die( esc_html__( 'You do not have sufficient permissions to access this page.', 'wootemasi' ) );
    }

    // Güncelleme işlemine ait bildirim
    if (isset($_GET['updated']) && $_GET['updated'] == 'true') {
        add_settings_error('wootemasi_messages', 'wootemasi_message', __('İndirim başarıyla uygulandı.', 'wootemasi'), 'updated');
    }       
    
    // Set class property
    $this->onsale = get_option( 'wootemasi_onsale_settings' );
    
    ?>
    <div class="wrap">
        <h2><?php _e('Ürün ve Mağaza Yönetimi', 'wootemasi'); ?></h2>           
        <?php settings_errors(); ?>
        
        <?php
        $active_tab = isset($_GET["tab"]) ? sanitize_text_field($_GET["tab"]) : "onsale-settings";
        ?>

        <h2 class="nav-tab-wrapper">
            <a href="?page=wootemasi-store-settings&tab=onsale-settings" class="nav-tab <?php echo $active_tab === 'onsale-settings' ? 'nav-tab-active' : ''; ?>">
                <?php echo __('İndirim Ayarları', 'wootemasi'); ?>
            </a>                
            <a href="?page=wootemasi-store-settings&tab=import-settings" class="nav-tab <?php echo $active_tab === 'import-settings' ? 'nav-tab-active' : ''; ?>">
                <?php echo __('Toplu Ürün Yükleme', 'wootemasi'); ?>
            </a>
            <a href="?page=wootemasi-store-settings&tab=export-settings" class="nav-tab <?php echo $active_tab === 'export-settings' ? 'nav-tab-active' : ''; ?>">
                <?php echo __('Toplu Ürün Çıkarma', 'wootemasi'); ?>
            </a>                
        </h2>            
        <div class="bsinternet_custom_page">
        <form method="post" action="<?php echo esc_url(admin_url('admin-post.php')); ?>">
        <input type="hidden" name="action" value="save_wootemasi_onsale_settings">
        <?php
        switch ($active_tab) {
            case 'onsale-settings':
                settings_fields( 'onsale_settings_group' );
                do_settings_sections( 'onsale-settings-page' );  
                break;              
            default:
                settings_fields( 'onsale_settings_group' );
                do_settings_sections( 'onsale-settings-page' );
                break;
        }
        wp_nonce_field('onsale_settings_group-options');
        submit_button(__('İndirimi Uygula', 'wootemasi'));
        ?>
        </form>
        </div>
        <style>
            .bsinternet_custom_page select,
            .w100 {width: 100% !important;}
        </style>
    </div>
    <?php        
}

public function store_init() {    
    
    register_setting( 'onsale_settings_group', 'wootemasi_onsale_settings', array( $this, 'sanitize' ) );
    add_settings_section( 'wootemasi_onsale_section', __('İndirim Yönetimi', 'wootemasi'), array( $this, 'wootemasi_onsale_section' ), 'onsale-settings-page' );

    add_settings_field( 'urun_kategorisi', __('Kategori', 'wootemasi'), array( $this, 'onsale_kategori_html' ), 'onsale-settings-page', 'wootemasi_onsale_section' );    
    add_settings_field( 'urun_markasi', __('Üretici / Marka', 'wootemasi'), array( $this, 'onsale_marka_html' ), 'onsale-settings-page', 'wootemasi_onsale_section' );
    add_settings_field('baslangic_tarihi', __('Başlangıç Tarihi', 'wootemasi'), array($this, 'onsale_baslangic_tarihi_html'), 'onsale-settings-page', 'wootemasi_onsale_section');
    add_settings_field('bitis_tarihi', __('Bitiş Tarihi', 'wootemasi'), array($this, 'onsale_bitis_tarihi_html'), 'onsale-settings-page', 'wootemasi_onsale_section');  
    add_settings_field('indirim_turu', __('İndirim Türü', 'wootemasi'), array($this, 'onsale_indirim_turu_html'), 'onsale-settings-page', 'wootemasi_onsale_section');
    add_settings_field('indirim_degeri', __('İndirim Değeri', 'wootemasi'), array($this, 'onsale_indirim_degeri_html'), 'onsale-settings-page', 'wootemasi_onsale_section');
    add_settings_field('mevcut_indirimler', __('Mevcut İndirimler', 'wootemasi'), array($this, 'onsale_mevcut_indirimler_html'), 'onsale-settings-page', 'wootemasi_onsale_section');
}

public function sanitize( $input ) {
    $sanitized_input = array();
    
    if( isset( $input['urun_kategorisi'] ) ) { $sanitized_input['urun_kategorisi'] = sanitize_text_field( $input['urun_kategorisi'] ); }
    if( isset( $input['urun_markasi'] ) ) { $sanitized_input['urun_markasi'] = sanitize_text_field( $input['urun_markasi'] ); }
    if (isset( $input['baslangic_tarihi'])) { $sanitized_input['baslangic_tarihi'] = sanitize_text_field($input['baslangic_tarihi']); }
    if (isset( $input['bitis_tarihi'])) { $sanitized_input['bitis_tarihi'] = sanitize_text_field($input['bitis_tarihi']); }
    if (isset( $input['indirim_turu'])) { $sanitized_input['indirim_turu'] = sanitize_text_field($input['indirim_turu']); }
    if (isset( $input['indirim_degeri'])) { $sanitized_input['indirim_degeri'] = sanitize_text_field($input['indirim_degeri']); }
    if (isset( $input['mevcut_indirimler'])) { $sanitized_input['mevcut_indirimler'] = sanitize_text_field($input['mevcut_indirimler']); }
    
    return $sanitized_input;    
}

public function wootemasi_onsale_section() {
    print( __('Ürünlere indirim uygulama sayfası', 'wootemasi') );
}

public function onsale_kategori_html() {
    $options = get_option('wootemasi_onsale_settings');
    $selected = isset($options['urun_kategorisi']) ? $options['urun_kategorisi'] : '';

    $dropdown = wp_dropdown_categories(array(
        'taxonomy'        => 'product_cat',
        'orderby'         => 'name',
        'hide_empty'      => false,
        'hierarchical'    => true,
        'echo'            => false,
        'show_option_none'=> 'Seçiniz',
        'option_none_value' => '',
        'selected'        => $selected,
        'name'            => 'wootemasi_onsale_settings[urun_kategorisi]'
    ));

    echo $dropdown;
}

public function onsale_marka_html() {
    $options = get_option('wootemasi_onsale_settings');
    $selected = isset($options['urun_markasi']) ? $options['urun_markasi'] : '';

    $brands = get_terms(array(
        'taxonomy'   => 'brands',
        'hide_empty' => true,
    ));

    if (!empty($brands) && !is_wp_error($brands)) {
        $dropdown = '<select name="wootemasi_onsale_settings[urun_markasi]" id="product-brand" class="w100">';
        $dropdown .= '<option value="">Marka Seçiniz</option>';

        foreach ($brands as $brand) {
            $dropdown .= '<option value="' . esc_attr($brand->slug) . '" ' . selected($selected, $brand->slug, false) . '>' . esc_html($brand->name) . '</option>';
        }

        $dropdown .= '</select>';

        echo $dropdown;
    }
}

public function onsale_baslangic_tarihi_html() {
    printf(
        '<input type="date" id="baslangic_tarihi" name="wootemasi_onsale_settings[baslangic_tarihi]" value="%s">',
        isset( $this->onsale['baslangic_tarihi'] ) ? esc_attr( $this->onsale['baslangic_tarihi']) : ''
    );      
}

public function onsale_bitis_tarihi_html() {
    printf(
        '<input type="date" id="bitis_tarihi" name="wootemasi_onsale_settings[bitis_tarihi]" value="%s">',
        isset( $this->onsale['bitis_tarihi'] ) ? esc_attr( $this->onsale['bitis_tarihi']) : ''
    );  
}

public function onsale_indirim_turu_html() {
     printf(
         '<select name="wootemasi_onsale_settings[indirim_turu]" id="indirim-turu" class="w100"><option value="yuzde">Yüzde İndirim</option><option value="sabit">Sabit İndirim</option></select>'
    );
}

public function onsale_indirim_degeri_html() {
    printf(
        '<input type="text" id="indirim_degeri" name="wootemasi_onsale_settings[indirim_degeri]" value="%s">',
        isset( $this->onsale['indirim_degeri'] ) ? esc_attr( $this->onsale['indirim_degeri']) : ''
    );  
}

public function onsale_mevcut_indirimler_html() {
     printf(
         '<select name="wootemasi_onsale_settings[mevcut_indirimler]" id="mevcut-indirimler" class="w100"><option value="dokunma">Oldukları Gibi Kalsın</option><option value="degistir">Bu Değerlerle Güncelle</option></select>'
    );
}   

public function save_settings() {
    if (!current_user_can('manage_options')) {
        wp_die(__('You do not have sufficient permissions to access this page.'));
    }
    
    if (!isset($_POST['_wpnonce']) || !wp_verify_nonce($_POST['_wpnonce'], 'onsale_settings_group-options')) {
        wp_die(__('Security check failed', 'wootemasi'));
    }       

    check_admin_referer('onsale_settings_group-options');

    $options = get_option('wootemasi_onsale_settings');
    $new_options = isset($_POST['wootemasi_onsale_settings']) ? $_POST['wootemasi_onsale_settings'] : array();
    $options = wp_parse_args($new_options, $options);

    update_option('wootemasi_onsale_settings', $options);

    $this->apply_discount_to_products();

    wp_redirect(add_query_arg(array('page' => 'wootemasi-store-settings&tab=onsale-settings', 'updated' => 'true'), admin_url('admin.php')));
    //exit; 
}   

function apply_discount_to_products() {
    $options = get_option('wootemasi_onsale_settings');

    // Kriterleri al
    $category = isset($options['urun_kategorisi']) ? $options['urun_kategorisi'] : '';
    $brand = isset($options['urun_markasi']) ? $options['urun_markasi'] : '';
    $start_date = isset($options['baslangic_tarihi']) ? strtotime($options['baslangic_tarihi']) : '';
    $end_date = isset($options['bitis_tarihi']) ? strtotime($options['bitis_tarihi']) : '';
    $discount_type = isset($options['indirim_turu']) ? $options['indirim_turu'] : '';
    $discount_value = isset($options['indirim_degeri']) ? floatval($options['indirim_degeri']) : 0;
    $existing_discounts = isset($options['mevcut_indirimler']) ? $options['mevcut_indirimler'] : 'dokunma';

    // Ürünleri sorgula
    $args = array(
        'post_type' => 'product',
        'posts_per_page' => -1,
        'tax_query' => array(),
    );

    if (!empty($category)) {
        $args['tax_query'][] = array(
            'taxonomy' => 'product_cat',
            'field' => 'slug',
            'terms' => $category,
        );
    }

    if (!empty($brand)) {
        $args['tax_query'][] = array(
            'taxonomy' => 'brands',
            'field' => 'slug',
            'terms' => $brand,
        );
    }

    $products = new WP_Query($args);

    if ($products->have_posts()) {
        while ($products->have_posts()) {
            $products->the_post();
            $product_id = get_the_ID();
            $product = wc_get_product($product_id);

            // Mevcut indirimleri kontrol et
            $current_sale_price = $product->get_sale_price();
            if ($current_sale_price && $existing_discounts === 'dokunma') {
                continue; // Bu ürünü atla
            }

            $regular_price = $product->get_regular_price();
            $new_sale_price = $regular_price;

            if ($discount_type === 'yuzde') {
                $new_sale_price = $regular_price * (1 - ($discount_value / 100));
            } elseif ($discount_type === 'sabit') {
                $new_sale_price = $regular_price - $discount_value;
            }

            $new_sale_price = max(0, $new_sale_price); // Negatif fiyatları önle

            // Fiyatı güncelle
            $product->set_sale_price($new_sale_price);
            $product->set_date_on_sale_from($start_date);
            $product->set_date_on_sale_to($end_date);
            $product->save();
        }
    }

    wp_reset_postdata();
}   
}
return new StoreSettingsPage();

Solution

  • I wrote it as follows. It's working.

    <?php
    
    if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly
    
    /**
     * WooTemasi Store Options
     *
     * @author   WooTemasi
     * @since    1.0
     * @package  wootemasi
     */
    
    class StoreSettingsPage
    {
        /**
         * Array of custom settings/options
         */
        private $onsale;
     
        /**
         * Constructor
         */
        public function __construct()
        {
            add_action( 'admin_menu', array( $this, 'wootemasi_store_settings_page' ) );
            add_action( 'admin_init', array( $this, 'store_init' ) );
            add_action('wp_ajax_apply_discount', array($this, 'ajax_apply_discount'));
        }
        
        public function ajax_apply_discount() {
            check_ajax_referer('apply_discount_nonce', 'security');
    
            if (!current_user_can('manage_options')) {
                wp_send_json_error('Yetersiz yetki');
            }
    
            $updated_count = $this->apply_discount_to_products($_POST);
            wp_send_json_success(array(
                'message' => sprintf(__('%d ürün güncellendi.', 'wootemasi'), $updated_count)
            ));
        }
     
        /**
         * Add settings page
         * The page will appear in "Settings" menu dropdown
         */
        public function wootemasi_store_settings_page() {
            add_submenu_page( 
                'wootemasi-settings', 
                __('Toplu Ürün Yönetimi', 'wootemasi'),
                __('Ürün Yönetimi', 'wootemasi'),
                'manage_options', 
                'wootemasi-store-settings', 
                array($this, 'wootemasi_store_page')
            ); 
        }
     
        /**
         * Options page callback
         */
        public function wootemasi_store_page() {
            
            // Check required user capability
            if ( !current_user_can( 'manage_options' ) )  {
                wp_die( esc_html__( 'You do not have sufficient permissions to access this page.', 'wootemasi' ) );
            }       
            
            // Set class property
            $this->onsale = get_option( 'wootemasi_onsale_settings' );
            
            ?>
            <div class="wrap">
                <h2><?php _e('Ürün ve Mağaza Yönetimi', 'wootemasi'); ?></h2>           
                <?php settings_errors(); ?>
                
                <?php
                $active_tab = isset($_GET["tab"]) ? sanitize_text_field($_GET["tab"]) : "onsale-settings";
                ?>
    
                <h2 class="nav-tab-wrapper">
                    <a href="?page=wootemasi-store-settings&tab=onsale-settings" class="nav-tab <?php echo $active_tab === 'onsale-settings' ? 'nav-tab-active' : ''; ?>">
                        <?php echo __('İndirim Ayarları', 'wootemasi'); ?>
                    </a>                
                </h2>  
                <?php
                if($active_tab == 'onsale-settings') : ?>
                <div class="bsinternet_custom_page">
                    <form method="post" action="<?php echo esc_url(admin_url('admin-post.php')); ?>">
                        <?php
                        settings_fields( 'onsale_settings_group' );
                        do_settings_sections( 'onsale-settings-page' );  
                        //submit_button(__('İndirimi Uygula', 'wootemasi')); 
                        ?>
                        <button type="button" id="onSaleButton" class="button button-primary">
                            Fiyatları Güncelle
                        </button>                   
                    </form>
                    <style>
                        .bsinternet_custom_page select,
                        .w100 {width: 100% !important;}
                        .preloader {
                            display: none;
                            position: fixed;
                            top: 0;
                            left: 0;
                            width: 100%;
                            height: 100%;
                            background-color: rgba(255, 255, 255, 0.7);
                            z-index: 9999;
                        }
                        .preloader:after {
                            content: '';
                            display: block;
                            position: absolute;
                            left: 48%;
                            top: 40%;
                            width: 40px;
                            height: 40px;
                            border-style: solid;
                            border-color: #000;
                            border-top-color: transparent;
                            border-width: 4px;
                            border-radius: 50%;
                            -webkit-animation: spin .8s linear infinite;
                            animation: spin .8s linear infinite;
                        }
                        @keyframes spin {
                            0% { transform: rotate(0deg); }
                            100% { transform: rotate(360deg); }
                        }
                    </style>
                    <div id="discountPreloader" class="preloader"></div>
                    <script type="text/javascript">
                        jQuery(document).ready(function($) {
                            $('#onSaleButton').on('click', function(e) {
                                e.preventDefault();
                                var $button = $(this);
                                $button.prop('disabled', true);
                                $('#discountPreloader').show();
    
                                var formData = {
                                    action: 'apply_discount',
                                    security: '<?php echo wp_create_nonce("apply_discount_nonce"); ?>',
                                    urun_kategorisi: $('#product-category').val(),
                                    urun_markasi: $('#product-brand').val(),
                                    baslangic_tarihi: $('#baslangic_tarihi').val(),
                                    bitis_tarihi: $('#bitis_tarihi').val(),
                                    indirim_turu: $('#indirim-turu').val(),
                                    indirim_degeri: $('#indirim_degeri').val(),
                                    mevcut_indirimler: $('#mevcut-indirimler').val()
                                };
    
                                $.ajax({
                                    url: ajaxurl,
                                    type: 'POST',
                                    data: formData,
                                    success: function(response) {
                                        if (response.success) {
                                            alert('İndirim başarıyla uygulandı! ' + response.data.message);
                                        } else {
                                            alert('Hata oluştu: ' + response.data);
                                        }
                                    },
                                    error: function() {
                                        alert('Bir hata oluştu. Lütfen tekrar deneyin.');
                                    },
                                    complete: function() {
                                        $button.prop('disabled', false);
                                        $('#discountPreloader').hide();
                                    }
                                });
                            });
                        });
                    </script>               
                </div>
                <?php endif; ?>
            </div>
            <?php        
        }
        
        /**
         * Register and add settings
         * Sayfaların içerikleri
         */    
        public function store_init() {    
            
            /*
             * İndirim Yönetimi
             */        
            register_setting( 'onsale_settings_group', 'wootemasi_onsale_settings', array( $this, 'sanitize' ) );
            add_settings_section( 'wootemasi_onsale_section', __('İndirim Yönetimi', 'wootemasi'), array( $this, 'wootemasi_onsale_section' ), 'onsale-settings-page' );
    
            add_settings_field( 'urun_kategorisi', __('Kategori', 'wootemasi'), array( $this, 'onsale_kategori_html' ), 'onsale-settings-page', 'wootemasi_onsale_section' );    
            add_settings_field( 'urun_markasi', __('Üretici / Marka', 'wootemasi'), array( $this, 'onsale_marka_html' ), 'onsale-settings-page', 'wootemasi_onsale_section' );
            add_settings_field('baslangic_tarihi', __('Başlangıç Tarihi', 'wootemasi'), array($this, 'onsale_baslangic_tarihi_html'), 'onsale-settings-page', 'wootemasi_onsale_section');
            add_settings_field('bitis_tarihi', __('Bitiş Tarihi', 'wootemasi'), array($this, 'onsale_bitis_tarihi_html'), 'onsale-settings-page', 'wootemasi_onsale_section');  
            add_settings_field('indirim_turu', __('İndirim Türü', 'wootemasi'), array($this, 'onsale_indirim_turu_html'), 'onsale-settings-page', 'wootemasi_onsale_section');
            add_settings_field('indirim_degeri', __('İndirim Değeri', 'wootemasi'), array($this, 'onsale_indirim_degeri_html'), 'onsale-settings-page', 'wootemasi_onsale_section');
            add_settings_field('mevcut_indirimler', __('Mevcut İndirimler', 'wootemasi'), array($this, 'onsale_mevcut_indirimler_html'), 'onsale-settings-page', 'wootemasi_onsale_section');   
        }
     
        /**
         * Sanitize POST data from custom settings form
         *
         * @param array $input Contains custom settings which are passed when saving the form
         */
        public function sanitize( $input ) {
            $sanitized_input = array();
            
            /*
             * İndirim Sayfası Görünümü
             */     
            if( isset( $input['urun_kategorisi'] ) ) { $sanitized_input['urun_kategorisi'] = sanitize_text_field( $input['urun_kategorisi'] ); }
            if( isset( $input['urun_markasi'] ) ) { $sanitized_input['urun_markasi'] = sanitize_text_field( $input['urun_markasi'] ); }
            if (isset( $input['baslangic_tarihi'])) { $sanitized_input['baslangic_tarihi'] = sanitize_text_field($input['baslangic_tarihi']); }
            if (isset( $input['bitis_tarihi'])) { $sanitized_input['bitis_tarihi'] = sanitize_text_field($input['bitis_tarihi']); }
            if (isset( $input['indirim_turu'])) { $sanitized_input['indirim_turu'] = sanitize_text_field($input['indirim_turu']); }
            if (isset( $input['indirim_degeri'])) { $sanitized_input['indirim_degeri'] = sanitize_text_field($input['indirim_degeri']); }
            if (isset( $input['mevcut_indirimler'])) { $sanitized_input['mevcut_indirimler'] = sanitize_text_field($input['mevcut_indirimler']); }
            
            return $sanitized_input;    
        }
        
        /** 
         * İndirim
         */
        public function wootemasi_onsale_section() {
            print( __('Ürünlere indirim uygulama sayfası', 'wootemasi') );
        }
        
        public function onsale_kategori_html() {
            $options = get_option('wootemasi_onsale_settings');
            $selected = isset($options['urun_kategorisi']) ? $options['urun_kategorisi'] : '';
    
            $dropdown = wp_dropdown_categories(array(
                'id'              => 'product-category',
                'taxonomy'        => 'product_cat',
                'orderby'         => 'name',
                'hide_empty'      => false,
                'hierarchical'    => true,
                'echo'            => false,
                'show_option_none'=> 'Seçiniz',
                'option_none_value' => '',
                'selected'        => $selected,
                'value_field'     => 'slug',
                'name'            => 'wootemasi_onsale_settings[urun_kategorisi]'
            ));
    
            echo $dropdown;
        }
    
        public function onsale_marka_html() {
            $options = get_option('wootemasi_onsale_settings');
            $selected = isset($options['urun_markasi']) ? $options['urun_markasi'] : '';
    
            $brands = get_terms(array(
                'taxonomy'   => 'brands',
                'hide_empty' => true,
            ));
    
            if (!empty($brands) && !is_wp_error($brands)) {
                $dropdown = '<select name="wootemasi_onsale_settings[urun_markasi]" id="product-brand" class="w100">';
                $dropdown .= '<option value="">Marka Seçiniz</option>';
    
                foreach ($brands as $brand) {
                    $dropdown .= '<option value="' . esc_attr($brand->slug) . '" ' . selected($selected, $brand->slug, false) . '>' . esc_html($brand->name) . '</option>';
                }
    
                $dropdown .= '</select>';
    
                echo $dropdown;
            }
        }
        
        public function onsale_baslangic_tarihi_html() {
            printf(
                '<input type="date" id="baslangic_tarihi" name="wootemasi_onsale_settings[baslangic_tarihi]" value="%s">',
                isset( $this->onsale['baslangic_tarihi'] ) ? esc_attr( $this->onsale['baslangic_tarihi']) : ''
            );      
        }
    
        public function onsale_bitis_tarihi_html() {
            printf(
                '<input type="date" id="bitis_tarihi" name="wootemasi_onsale_settings[bitis_tarihi]" value="%s">',
                isset( $this->onsale['bitis_tarihi'] ) ? esc_attr( $this->onsale['bitis_tarihi']) : ''
            );  
        }
        
        public function onsale_indirim_turu_html() {
             printf(
                 '<select name="wootemasi_onsale_settings[indirim_turu]" id="indirim-turu" class="w100"><option value="yuzde">Yüzde İndirim</option><option value="sabit">Sabit İndirim</option></select>'
            );
        }
        
        public function onsale_indirim_degeri_html() {
            printf(
                '<input type="text" id="indirim_degeri" name="wootemasi_onsale_settings[indirim_degeri]" value="%s">',
                isset( $this->onsale['indirim_degeri'] ) ? esc_attr( $this->onsale['indirim_degeri']) : ''
            );  
        }
        
        public function onsale_mevcut_indirimler_html() {
             printf(
                 '<select name="wootemasi_onsale_settings[mevcut_indirimler]" id="mevcut-indirimler" class="w100"><option value="dokunma">Oldukları Gibi Kalsın</option><option value="degistir">Bu Değerlerle Güncelle</option></select>'
            );
        }
        
        /**
         * İndirim İşlemi
         */ 
        public function apply_discount_to_products($data) {
            // AJAX'tan gelen verileri kullan
            $category = isset($data['urun_kategorisi']) ? sanitize_text_field($data['urun_kategorisi']) : '';
            $brand = isset($data['urun_markasi']) ? sanitize_text_field($data['urun_markasi']) : '';
            $discount_type = isset($data['indirim_turu']) ? sanitize_text_field($data['indirim_turu']) : '';
            $discount_value = isset($data['indirim_degeri']) ? floatval($data['indirim_degeri']) : 0;
            $start_date = isset($data['baslangic_tarihi']) ? sanitize_text_field($data['baslangic_tarihi']) : '';
            $end_date = isset($data['bitis_tarihi']) ? sanitize_text_field($data['bitis_tarihi']) : '';
            $existing_discounts = isset($data['mevcut_indirimler']) ? sanitize_text_field($data['mevcut_indirimler']) : '';
    
            error_log("Applying discount: Category: $category, Brand: $brand, Type: $discount_type, Value: $discount_value, Start: $start_date, End: $end_date, Existing: $existing_discounts");
    
            // Ürünleri sorgula
            $args = array(
                'post_type' => 'product',
                'posts_per_page' => -1,
                'tax_query' => array('relation' => 'AND'),
            );
    
            if (!empty($category)) {
                $args['tax_query'][] = array(
                    'taxonomy' => 'product_cat',
                    'field' => 'slug',
                    'terms' => $category,
                );
            }
    
            if (!empty($brand)) {
                $args['tax_query'][] = array(
                    'taxonomy' => 'brands',
                    'field' => 'slug',
                    'terms' => $brand,
                );
            }
    
            $products = new WP_Query($args);
            $updated_count = 0;
    
            if ($products->have_posts()) {
                while ($products->have_posts()) {
                    $products->the_post();
                    $product_id = get_the_ID();
                    $product = wc_get_product($product_id);
    
                    $regular_price = $product->get_regular_price();
                    $current_sale_price = $product->get_sale_price();
    
                    // Mevcut indirimleri kontrol et
                    if ($existing_discounts === 'dokunma' && !empty($current_sale_price)) {
                        continue; // Mevcut indirimi olan ürünleri atla
                    }
    
                    $new_sale_price = $regular_price;
    
                    if ($discount_type === 'yuzde') {
                        $new_sale_price = $regular_price * (1 - ($discount_value / 100));
                    } elseif ($discount_type === 'sabit') {
                        $new_sale_price = $regular_price - $discount_value;
                    }
    
                    $new_sale_price = max(0, $new_sale_price); // Negatif fiyatları önle
    
                    // Fiyatı güncelle
                    $product->set_sale_price($new_sale_price);
                    $product->set_date_on_sale_from($start_date);
                    $product->set_date_on_sale_to($end_date);
                    $product->save();
    
                    $updated_count++;
                }
            }
    
            wp_reset_postdata();
            return $updated_count;
        }
    }
    
    return new StoreSettingsPage();