
Sakarya
In Woocommerce habe ich zwei benutzerdefinierte Felder in meinen Produkten festgelegt:
iadi_price
zu einem individuellen Verkaufspreis.
iadi_date
für ein individuelles Datum.
Ich möchte den Verkaufspreis aktualisieren, wenn zwischen dem angegebenen Datum und heute weniger als 3 Tage liegen.
Ich habe folgenden Code geschrieben:
function fiyatidegistir() {
global $product;
$bugun = time();
$yenifiyat = get_post_meta($product->ID, 'iadi_price', true); //new sale price
$kgn = get_post_meta($product->ID, 'iadi_date', true); // date
if(!empty($kgn)) {
$kalan = $kgn - $bugun;
$dakika = $kalan / 60;
$saat = $dakika / 60;
$gun = $saat / 24;
$yil = floor($gun/365);
$gun_farki = floor($gun - (floor($yil) * 365));
if($gun_farki<4 && !empty($yenifiyat)) {
update_post_meta($product->ID, '_price', $yenifiyat);
}
}
}
add_action( 'woocommerce_before_main_content', 'fiyatidegistir');
Aber es geht nicht und nichts passiert.
Was mache ich falsch? Wie kann ich einen Produktverkaufspreis programmgesteuert basierend auf benutzerdefinierten Preis- und Datumsfeldern wie erläutert ändern?

LoicTheAztec
Es ist keine gute Idee, dies so zu tun, da:
- Wie Sie die aktualisierten Produkte verwalten, um mehrere aufeinanderfolgende Preisaktualisierungen zu vermeiden.
- Auf diese Weise wird Ihre Website einfach zerstört (für viele Prozesse).
- Ihre Produkte werden nicht zum Verkauf angeboten, wenn Sie den aktiven Preis aktualisieren
- Nach Ablauf des Zeitraums können Sie nicht mehr zum ursprünglichen Preis zurückkehren.
Außerdem ist Ihr Code voller Fehler in Bezug auf WC_Products in Woocommerce und in Bezug auf Datumsberechnungen. Letzte Sache, wenn Sie Code schreiben, ist es besser, Variablen und Funktionen auf Englisch zu benennen und Ihren Code auch auf Englisch zu kommentieren, da jeder ihn verstehen kann.
Versuchen Sie stattdessen Folgendes, das für einfache Produkte funktioniert und einen Verkaufspreis für die verwandten Produkte anzeigt, wenn Ihre Bedingungen übereinstimmen (Datum und benutzerdefinierter Preis):
add_filter( 'woocommerce_product_get_price', 'conditional_product_sale_price', 20, 2 );
add_filter( 'woocommerce_product_get_sale_price', 'conditional_product_sale_price', 20, 2 );
function conditional_product_sale_price( $price, $product ) {
if( is_admin() ) return $price;
$new_price = get_post_meta( $product->get_id(), 'iadi_price', true ); //new sale price
$date = get_post_meta( $product->get_id(), 'iadi_date', true ); // date
if( ! empty($date) && ! empty($new_price) ) {
$date_time = (int) strtotime($date); // Convert date in time
$now_time = (int) strtotime("now"); // Now time in seconds
$one_day = 86400; // One day in seconds
// Calculate the remaining days
$remaining_days = floor( ( $date_time - $now_time ) / $one_day );
if( $remaining_days >= 0 && $remaining_days < 4 )
$price = $new_price;
}
return $price;
}
Der Code wird in die function.php-Datei Ihres aktiven untergeordneten Designs (oder aktiven Designs) eingefügt. Getestet und funktioniert.

Falls Sie hierher gekommen sind, damit es mit Variationen funktioniert, benötigen Sie alle folgenden Filter:
add_filter( 'woocommerce_product_get_price', 'conditional_product_sale_price', 10, 2 );
add_filter( 'woocommerce_product_variation_get_price', 'conditional_product_sale_price', 10, 2 );
add_filter( 'woocommerce_product_get_sale_price', 'conditional_product_sale_price', 10, 2 );
add_filter( 'woocommerce_product_variation_get_sale_price', 'conditional_product_sale_price', 10, 2 );
add_filter( 'woocommerce_variation_prices_price', 'conditional_product_sale_price', 10, 2 );
add_filter( 'woocommerce_variation_prices_sale_price', 'conditional_product_sale_price', 10, 2 );
Und Sie müssen sicherstellen, dass Sie die geändert haben woocommerce_get_variation_prices_hash wegen der gespeicherten Transienten.
Vielleicht finden Sie das Wesentliche, das ich für einen Kunden erstellt habe, nützlich
https://www.rent-a-ninja.org/programming/wordpress-plugin-entwickler-naehe-graz/woocommerce-custom-sale-price-for-custom-role/
10012700cookie-checkLegen Sie den Produktverkaufspreis bedingt basierend auf benutzerdefinierten Feldern in Woocommerce festyes