• Resolved webmaik

    (@webmaik)


    In unserem WooCommerce-Shop k?nnen Artikel über den Lagerbestand hinaus verkauft werden. Nur ist es dann so, dass die Lieferzeit sich dann auch ver?ndern soll. über die functions.php haben wir es geschafft für Produkte, welche im Lieferrückstand sind eine andere Lieferzeit anzeigen zu lassen.

    Nur ist es aber so, dass wenn zum Beispiel vom Produkt 1 Stück auf Lager ist und der Kunde zwei Stück in den Warenkorb legt, im Warenkorb und an der Kasse weiterhin die Lieferzeit für die Lagermenge angezeigt wird. Was in diesem Fall leider der falsche Wert ist. Hier sollte die alternative Lieferzeit angezeigt werden.

    Hat jemand eine Idee, wie wir es hinbekommen, dass im Warenkorb geprüft wird, ob die Menge im Warenkorb die Menge des Lagerbestands überschreit und in diesem Fall auf die zweite Lieferzeit ausgegeben wird?

    Ich stehe leider auf dem Schlauch und meine PHP-Kenntnisse sind nicht all zu gross.

    Folgenden Code haben wir aktuell in der functions.php im Einsatz

    /*================================================
    Lieferzeitenanzeige bei Lieferrückstand
    ================================================*/
    add_action( 'woocommerce_process_product_meta', 'wdt_process_delivery_time_fallback', 10, 2 );
    function wdt_process_delivery_time_fallback( $id, $post ){
     
    	$dtf_id = $_POST['delivery_time_fallback'];
    	if( $dtf_id === '' ) {
    		delete_post_meta( $id, '_delivery_time_fallback' );
    	} else {
    		update_post_meta( $id, '_delivery_time_fallback', $dtf_id );
    	}
     
    }
    
    add_action( 'woocommerce_product_options_stock_status', 'wdt_add_deliver_time_fallback' );
    function wdt_add_deliver_time_fallback() {
    	// Lieferzeiten aus den Terms generieren
    	$delivery_times = get_terms( array(
    		'taxonomy' => 'product_delivery_time',
    		'hide_empty' => false,
    	) );
    	$options[''] = __( 'Keine', 'woocommerce');
    	foreach ($delivery_times as $key => $term) {
    		$options[$term->term_id] = $term->name;
    	}
    	// gew?hlte Lieferzeit aufbereiten
    	$dtf_id = get_post_meta( get_the_ID(), '_delivery_time_fallback', true );
    	// Element generieren
    	woocommerce_wp_select( array(
    		'id'          => 'delivery_time_fallback',
    		'label'       => __('Lieferzeit bei Lieferrückstand', 'woocommerce'),
    		'options'     => $options,
    		'value'       => $dtf_id,
    		'desc_tip' => true,
    		'description' => __( 'Lieferzeit die angezeigt wird, wenn sich der Artikel im Lieferrückstand befindet.' ),
    	) );
    		
    }
    
    add_filter( 'woocommerce_germanized_delivery_time_backorder_html', 'wdt_adjust_delivery_time_html', 10, 4 );
    function wdt_adjust_delivery_time_html( $text, $product ) {
    
    	// this must be a variation if we can find a parent_id
    	if ( $product->get_parent_id() ) {
    		$id = $product->get_parent_id();
    	} else {
    		$id = $product->get_id();
    	}
    	
    	// let's try to find the parent delivery time in postmeta
    	if ( metadata_exists( 'post', $id, '_delivery_time_fallback' ) ) {
    
    		$delivery_times = get_terms( array(
    			'taxonomy' => 'product_delivery_time',
    			'hide_empty' => false,
    		) );
    
    		$dtf_id = get_post_meta( $id, '_delivery_time_fallback', true );
    
    		foreach ($delivery_times as $dtf) {
    			if ( $dtf->term_id == $dtf_id) {
    				$delivery_time = $dtf->name;
    				break;
    			}
    		}
    
    	} else {
    		$delivery_time = '1-2 Wochen ab Bestelldatum';
    	}
    	return 'Lieferzeit: '.$delivery_time;
    
    }

    In den Germanized-Einstellungen haben wir die Option “Lieferzeit ausblenden falls das Produkt im Lieferrückstand ist.” aktiviert.

Viewing 1 replies (of 1 total)
  • Plugin Author vendidero

    (@vendidero)

    Nur ist es aber so, dass wenn zum Beispiel vom Produkt 1 Stück auf Lager ist und der Kunde zwei Stück in den Warenkorb legt, im Warenkorb und an der Kasse weiterhin die Lieferzeit für die Lagermenge angezeigt wird. Was in diesem Fall leider der falsche Wert ist. Hier sollte die alternative Lieferzeit angezeigt werden.

    Das ist schon recht komplex und wird wohl nur über gr??ere Anpassungen m?glich sein. Ihr müsstet (vermutlich) im Callback von woocommerce_germanized_delivery_time_backorder_html über das WC_Cart object den aktuellen Warenkorb (falls vorhanden) der aktuellen Session prüfen und dann die Lieferzeit entsprechend anpassen. Ich würde euch bei solchen Anpassungen dazu raten, einen Webentwickler hinzuziehen.

    Grü?e

Viewing 1 replies (of 1 total)
  • The topic ‘Lieferzeit für Produkte, welche nicht am Lager sind’ is closed to new replies.