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;
Here are some details about what I've implemented:
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();
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();