Vorab:
Bitte berücksichtige dabei, dass du bei solchen Anpassungen immer ein Child Theme verwenden solltest. Denn sonst läufst du Gefahr, dass bei einem Update deines Themes alle individuellen Code Anpassungen in der functions.php überschrieben werden und für immer verloren sind.
Alternative: das Plugin Code Snippets verwenden
WooCommerce CSS- und JavaScript-Dateien nur auf Shop-Seiten laden
if (!function_exists( 'evolution_manage_woocommerce_styles' ) ) :
/**
* Optimize WooCommerce Scripts
* Removes WooCommerce styles and scripts from non WooCommerce pages.
*/
function evolution_manage_woocommerce_styles() {
//first check that woo exists to prevent fatal errors
if ( function_exists( 'is_woocommerce' ) ) {
//dequeue scripts and styles
if ( ! is_woocommerce() && ! is_cart() && ! is_checkout() && ! is_account_page() ) {
wp_dequeue_style( 'woocommerce-layout' );
wp_dequeue_style( 'woocommerce-smallscreen' );
wp_dequeue_style( 'woocommerce-general' );
wp_dequeue_style( 'evolution-woostyles' );
wp_dequeue_script( 'wc_price_slider' );
wp_dequeue_script( 'wc-single-product' );
wp_dequeue_script( 'wc-add-to-cart' );
wp_dequeue_script( 'wc-cart-fragments' );
wp_dequeue_script( 'wc-checkout' );
wp_dequeue_script( 'wc-add-to-cart-variation' );
wp_dequeue_script( 'wc-single-product' );
wp_dequeue_script( 'wc-cart' );
wp_dequeue_script( 'wc-chosen' );
wp_dequeue_script( 'woocommerce' );
wp_dequeue_script( 'prettyPhoto' );
wp_dequeue_script( 'prettyPhoto-init' );
wp_dequeue_script( 'jquery-blockui' );
wp_dequeue_script( 'jquery-placeholder' );
wp_dequeue_script( 'fancybox' );
wp_dequeue_script( 'jqueryui' );
}
}
}
add_action( 'wp_enqueue_scripts', 'evolution_manage_woocommerce_styles', 99 );
endif;FRONTEND
Ganz einfach ,00 bei Preisen (Nachkommastelle) in WooCommerce überall entfernen
Glücklicherweise gibt es Möglichkeiten, die Anzeige von Dezimalstellen zu vermeiden, solange es sich um Preise mit ganzen Zahlen (Ganzzahlen) handelt. Setzen Sie die Dezimalstellen in den Woocommerce-Währungseinstellungen auf 2 und fügen Sie diesen Code-Snippet in die functions.php Ihres Themes oder in ein separates Plugin ein.
add_filter( 'woocommerce_price_trim_zeros', '__return_true' );
Übersetzung und Texte anpassen
// Übersetzungen und Texte anpassen add_filter('gettext', 'translate_text'); add_filter('ngettext', 'translate_text'); function translate_text($translated) { $translated = str_ireplace('Apple Pie', 'Apfelkuchen', $translated); $translated = str_ireplace('Bike', 'Fahrrad', $translated); return $translated; }
Kommentarfeld an der KASSE entfernen
Mit diesem einfachen Snippet wird das Kommentarfeld auf der Seite Kasse ausgeblendet. Wir nutzen es in einigen unserer Shops weil der Bestellprozess und die Bearbeitung der Bestellungen automatisch abläuft und das Feld einfach nicht beachtet wird. Oft schreiben Kunden auch Hinweise zur Zustellung hin, die ohnehin nicht auf einem Paketschein aufgedruckt werden, daher haben wir uns entschlossen das Feld zu entfernen.
// Kommentarfeld auf Kasse Seite entfernen add_filter( 'woocommerce_checkout_fields' , 'alter_woocommerce_checkout_fields' ); function alter_woocommerce_checkout_fields( $fields ) { unset($fields['order']['order_comments']); return $fields; }
Zusätzliche Checkbox an der Kasse hinzufügen
Gründe für zusätzliche Checkboxen auf der Kassen-Seite sind so vielfältig wie es Shops gibt. Einer unser Kunden verkauft z.B. Produkte die erst ab 16 erworben werden dürfen, so wollte er eine zusätzliche Checkbox haben in der der Kunde bestätigt, dass er mindestens 16 Jahre alt ist. Ohne die entsprechende Checkbox anzuklicken soll die Bestellung nicht abgeschickt werden. Sollte man versuchen die Bestellung dennoch abzusenden, erfolgt ein entsprechender Hinweis.
// Zusätzliche Checkbox auf Seite Kasse hinzufügen
add_action('woocommerce_after_order_notes', 'my_custom_checkout_field');
function my_custom_checkout_field( $checkout ) {
echo '<div id="my-new-field"><h3>'.__('Altersfreigabe ').'</h3>';
woocommerce_form_field( 'my_checkbox', array(
'type' => 'checkbox',
'class' => array('input-checkbox'),
'label' => __('Hiermit bestätige ich, dass ich mindestens 16 Jahre alt bin.'),
'required' => true,
), $checkout->get_value( 'my_checkbox' ));
echo '</div>';
}
/**
* Process the checkout
**/
add_action('woocommerce_checkout_process', 'my_custom_checkout_field_process');
function my_custom_checkout_field_process() {
global $woocommerce;
// Check if set, if its not set add an error.
if (!$_POST['my_checkbox'])
wc_add_notice('<b>Altersfreigabe</b> ist ein Pflichtfeld.', 'error' );
}
/**
* Update the order meta with field value
**/
add_action('woocommerce_checkout_update_order_meta', 'my_custom_checkout_field_update_order_meta');
function my_custom_checkout_field_update_order_meta( $order_id ) {
if ($_POST['my_checkbox']) update_post_meta( $order_id, 'My Checkbox', esc_attr($_POST['my_checkbox']));
}
Zwischensumme durchstreichen und neuen Preis in Verbindung mit einem Gutschein anzeigen
Dieses Snippet kommt zum Tragen in Verbindung mit einem Gutschein. Die Ursprüngliche Zwischensumme im Warenkorb wird durchgestrichen und der neue, rabattierte Preis wird angezeigt. Auf Wunsch kann mit etwas CSS dann auch noch die Zeile mit dem Gutschein ausgeblendet werden.
// Zwischensumme durchstreichen und neuen Preis anzeigen in Verbindung mit Gutschein
add_filter( 'woocommerce_cart_subtotal', 'slash_cart_subtotal_if_discount', 99, 3 );
function slash_cart_subtotal_if_discount( $cart_subtotal, $compound, $obj ){
global $woocommerce;
if ( $woocommerce->cart->get_cart_discount_total() <> 0 ) {
$new_cart_subtotal = wc_price( WC()->cart->subtotal - $woocommerce->cart->get_cart_discount_tax_total() - $woocommerce->cart->get_cart_discount_total() );
$cart_subtotal = sprintf( '%s %s', $cart_subtotal , $new_cart_subtotal );
}
return $cart_subtotal;
}
Preise für unregistrierte Benutzer („normale Kunden“) ausblenden
Einer unser Kunden verkauft seine Artikel nur an B2B-Kunden und diese müssen sich vorher registrieren um einkaufen zu können. Sein Wunsch war es, die Produktpreise für unregistrierte User / Besucher auszublenden.
// Preise für unregistrierte User ausblenden
add_action('init', 'hide_price_add_cart_not_logged_in');
function hide_price_add_cart_not_logged_in() {
if ( !is_user_logged_in() ) {
remove_action( 'woocommerce_after_shop_loop_item', 'woocommerce_template_loop_add_to_cart', 10 );
remove_action( 'woocommerce_single_product_summary', 'woocommerce_template_single_add_to_cart', 30 );
remove_action( 'woocommerce_single_product_summary', 'woocommerce_template_single_price', 10 );
remove_action( 'woocommerce_after_shop_loop_item_title', 'woocommerce_template_loop_price', 10 );
add_action( 'woocommerce_single_product_summary', 'print_login_to_see', 31 );
add_action( 'woocommerce_after_shop_loop_item', 'print_login_to_see', 11 );
}
}
function print_login_to_see() {
echo '' . __('Einloggen um Preise zu sehen', 'theme_name') . '';
}
Youtube als Produktvideo
// YouTube Video als Produktbild anzeigen
add_action( 'woocommerce_before_single_product', 'show_video_not_image' );
function show_video_not_image() {
// Nur anzuwenden bei Produkt ID 4835
if ( is_single( '4835' ) ) {
remove_action( 'woocommerce_before_single_product_summary', 'woocommerce_show_product_images', 20 );
remove_action( 'woocommerce_product_thumbnails', 'woocommerce_show_product_thumbnails', 20 );
add_action( 'woocommerce_before_single_product_summary', 'show_product_video', 30 );
}
}
function show_product_video() {
echo '// Youtube Video iframe Code ersetzen echo ''; echo ''; }
In der Auftragsbestätigung Email Produktbild und Artikelnummer hinzufügen
Die Auftragsbestätigung per Mail ist nicht nur eine rechtliche Annahme der Bestellung, sondern auch ein wichtiges Instrument um dem Kunden alle nur möglichen Informationen zu seiner Bestellung zu liefern. Je mehr, desto sicherer fühlt sich der Kunde auch in seiner Entscheidung, er hat ein positives Einkaufserlebnis und weniger Rückfragen. Nur leider sind standardmäßig nicht die Produktbilder und auch nicht die Artikelnummern in der WooCommerce-Auftragsbestätigung vorhanden.
// In E-Mail-Auftragsbestätigung Produktbild und Artikelnummer
function sww_add_sku_to_wc_emails( $args ) {
$args['show_sku'] = true;
return $args;
}
add_filter( 'woocommerce_email_order_items_args', 'sww_add_sku_to_wc_emails' );
/**
* Adds product images to WooCommerce order emails
*/
function sww_add_photos_to_wc_emails( $args ) {
$args['show_image'] = true;
$args['image_size'] = array( 100, 100 );
return $args;
}
add_filter( 'woocommerce_email_order_items_args', 'sww_add_photos_to_wc_emails' );
Anzahl der Schlagwörter in der Tag-Cloud
Bei einem WooCommerce-Shop haben wir kürzlich festgestellt, dass WordPress die Anzahl der Keywords im Widget der Tag-Cloud standardmäßig auf 45 begrenzt. Mit diesem Snippet kann man die Zahl bei „number“ anpassen wie man möchte.
// Anzahl Keywords in Tag-Cloud
function widget_custom_tag_cloud($args) {
// Control number of tags to be displayed - 0 no tags
$args['number'] = 40;
// Tag font unit px, pt, em
$args['unit'] = 'px';
// Maximum tag text size
$args['largest'] = 24;
// Minimum tag text size
$args['smallest'] = 8;
// Outputs our edited widget
return $args;
}
add_filter( 'widget_tag_cloud_args', 'widget_custom_tag_cloud' );
Kategoriebilder im Template bzw. in der Theme anzeigen
Hast du dich auch schon einmal gewundert, dass man bei WoooCommerce zu jeder Kategorie ein Bild hochladen kann, dich aber dann gefragt, warum das Bild nicht angezeigt wird? Von Haus aus ist diese Funktion nicht in WooCommerce integriert und nicht jedes Theme unterstützt es, aber es gibt auch hierfür eine einfache Lösung.
// Kategoriebilder im Template anzeigen
add_action( 'woocommerce_archive_description', 'woocommerce_category_image', 2 );
function woocommerce_category_image() {
if ( is_product_category() ){
global $wp_query;
$cat = $wp_query->get_queried_object();
$thumbnail_id = get_woocommerce_term_meta( $cat->term_id, 'thumbnail_id', true );
$image = wp_get_attachment_url( $thumbnail_id );
if ( $image ) {
echo '<img src="' . $image . '" alt="' . $cat->name . '" />';
}
}
}
Hinweis zum Gutschein an der Kasse ausblenden
Mal wieder in Tipp in Sachen Benutzerfreundlichkeit. Hat man bei WooCommerce die Gutschein-Funktion aktiviert wird jeweils auf der Seite Warenkorb und Kasse ein Hinweis zur Eingabe des Gutschein-Codes angezeigt. Wenn ein Kunde aber bereits auf der Seite Warenkorb den Gutschein eingegeben und aktiviert hat, ist ein solcher Hinweis auf der Seite Kasse überflüssig.
// Hinweis zum Gutschein auf Seite Kasse ausblenden
add_filter( 'woocommerce_coupons_enabled', 'woocommerce_coupons_enabled_checkout' );
function woocommerce_coupons_enabled_checkout( $coupons_enabled ) {
global $woocommerce;
if ( ! empty( $woocommerce->cart->applied_coupons ) ) {
return false;
}
return $coupons_enabled;
}
Preis „ab“ anstelle „von … bis …“ bei Varianten
Vielleicht gehörst du auch zu den Menschen die anstelle der Preisdarstellung bei Varianten „von bis“ lieber einen Preis mit dem Hinweis „ab“ haben möchten.
// Preise ab anstelle von bis bei Varianten
function wc_wc20_variation_price_format( $price, $product ) {
// Main Price
$prices = array( $product->get_variation_price( 'min', true ), $product->get_variation_price( 'max', true ) );
$price = $prices[0] !== $prices[1] ? sprintf( __( 'ab: %1$s', 'woocommerce' ), wc_price( $prices[0] ) ) : wc_price( $prices[0] );
// Sale Price
$prices = array( $product->get_variation_regular_price( 'min', true ), $product->get_variation_regular_price( 'max', true ) );
sort( $prices );
$saleprice = $prices[0] !== $prices[1] ? sprintf( __( 'ab: %1$s', 'woocommerce' ), wc_price( $prices[0] ) ) : wc_price( $prices[0] );
if ( $price !== $saleprice ) {
$price = '<del>' . $saleprice . '</del> <ins>' . $price . '</ins>';
}
return $price;
}
add_filter( 'woocommerce_variable_sale_price_html', 'wc_wc20_variation_price_format', 10, 2 );
add_filter( 'woocommerce_variable_price_html', 'wc_wc20_variation_price_format', 10, 2 );
Anzahl der Verkäufe bei jedem Produkt einblenden
Ebay macht es, andere Onlineshops machen es auch, sie zeigen bei jedem Produkt die Anzahl der Verkäufe. Das schafft nicht nur Transparenz und zeigt wie sehr ein Produkt gefragt ist, es zeigt aber auch vor allem das Vertrauen der Kunden in das Produkt.
Den Text kannst du nach Belieben anpassen. Die Reihenfolge bzw. die Platzierung der Zeile im Frontend kannst du mit der Zahl „11“ in Zeile 1 variieren.
// Anzahl Verkäufe bei Produkt anzeigen
add_action( 'woocommerce_single_product_summary', 'wc_product_sold_count', 11 );
function wc_product_sold_count() {
global $product;
$units_sold = get_post_meta( $product->id, 'total_sales', true );
echo '<p>' . sprintf( __( 'Units Sold: %s', 'woocommerce' ), $units_sold ) . '</p>';
}
Angebotszeitraum beim Produkt anzeigen
Bei WooCommerce kannst du bei jedem Artikel einen Angebotspreis und einen Zeitraum festlegen von wann bis wann das Angebot gilt. Nun gibt es aber immer wieder Situationen in denen deine Kunden sich fragen wie lange das Angebot denn noch gültig ist. Erspare deinen Kunden das Nachfragen und dir das Antworten indem du das Enddatum des Angebots beim Produkt darstellst. Passe ggf. den Text und die Ausgabe des Datums an deine Wünsche an.
// Angebotszeitraum beim Produkt anzeigen
add_filter( 'woocommerce_get_price_html', 'custom_price_html', 100, 2 );
function custom_price_html( $price, $product ){
global $post;
$sales_price_to = get_post_meta($post->ID, '_sale_price_dates_to', true);
if(is_single() && $sales_price_to != "")
{
$sales_price_date_to = date("j M y", $sales_price_to);
return str_replace( '</ins>', ' </ins> <b>(Offer till '.$sales_price_date_to.')</b>', $price );
}
else
{
return apply_filters( 'woocommerce_get_price', $price );
}
}
Mindestbestellwert im Shop
Manchmal muss oder möchte man in seinem Shop einen globalen Mindestbestellwert einrichten, weil es sich vorher wirtschaftlich nicht lohnt Bestellungen zu erlauben und zu bearbeiten. Mit diesem einfachen Snippet kannst du das in deinem Shop umsetzten. Ersetze einfach deinen Mindestbestellwert und passe ggf. noch den Hinweis bzw. die Fehlermeldung an.
// Mindestbestellwert für den ganzen Shop und Anzeige eines Hin
add_action( 'woocommerce_check_cart_items', 'spyr_set_min_total' );
function spyr_set_min_total() {
// Anzeige nur im Warenkorb und Kasse
if( is_cart() || is_checkout() ) {
global $woocommerce;
// Hier kommt der Mindestbestellwert hin
$minimum_cart_total = 6;
// bezieht sich auf die Zwischensumme im Warenkorb
$total = WC()->cart->subtotal;
// Berechnung und Fehlermeldung
if( $total <= $minimum_cart_total ) {
// Zeige Fehlermeldung
wc_add_notice( sprintf( 'Der <strong>Mindestbestellwert</strong> beträgt %s %s.'.' Aktuelle Zwischensumme: %s %s.',
$minimum_cart_total,
get_option( 'woocommerce_currency'),
$total,
get_option( 'woocommerce_currency') ),
'error' );
}
}
}
Ersparnis in % beim Produkt anzeigen
Hier eine weitere verkaufsfördernde Maßnahme. Mache es deinem Kunden einfacher und zeige ihm seine Ersparnis in Prozent an. Dieses Snippet errechnet automatisch die Ersparnis in % bei einem Artikel mit einem Angebotspreis. Die Anzeige erfolgt sowohl auf der Produktseite als auch auf der Kategorieseite.
// Ersparnis in % bei Produkt anzeigen
add_filter( 'woocommerce_format_sale_price', 'woocommerce_custom_sales_price', 10, 3 );
function woocommerce_custom_sales_price( $price, $regular_price, $sale_price ) {
$percentage = round( ( $regular_price - $sale_price ) / $regular_price * 100 ).'%';
$percentage_txt = __(' <br>Ersparnis: ', 'woocommerce' ).$percentage;
$price = '<del>' . ( is_numeric( $regular_price ) ? wc_price( $regular_price ) : $regular_price ) . '</del> <ins>' . ( is_numeric( $sale_price ) ? wc_price( $sale_price ) . $percentage_txt : $sale_price . $percentage_txt ) . '</ins>';
return $price;
}
Ersparnis in € und % beim Produkt anzeigen
Hier eine weitere verkaufsfördernde Maßnahme. Mache es deinem Kunden einfacher und zeige ihm seine Ersparnis in € und Prozent an. Dieses Snippet errechnet automatisch die Ersparnis bei einem Artikel mit einem Angebotspreis. Die Anzeige erfolgt auf der Produktseite und kann mittels einer eigenen CSS-Klasse angepasst werden.
// Ersparnis in € und % bei Produkt anzeigen
add_filter( 'woocommerce_get_price_html', 'change_displayed_sale_price_html', 10, 2 );
function change_displayed_sale_price_html( $price, $product ) {
// Only on sale products on frontend and excluding min/max price on variable products
if( $product->is_on_sale() && ! is_admin() && ! $product->is_type('variable')){
// Get product prices
$regular_price = (float) $product->get_regular_price(); // Regular price
$sale_price = (float) $product->get_price(); // Active price (the "Sale price" when on-sale)
// "Saving price" calculation and formatting
$saving_price = wc_price( $regular_price - $sale_price );
// "Saving Percentage" calculation and formatting
$precision = 1; // Max number of decimals
$saving_percentage = round( 100 - ( $sale_price / $regular_price * 100 ), 1 ) . '%';
// Append to the formated html price
$price .= sprintf( __('<p class="saved-sale">Du sparst: %s <em>(%s)</em></p>', 'woocommerce' ), $saving_price, $saving_percentage );
}
return $price;
}
Andere Versandarten anzeigen auch wenn Versand kostenlos ist
Mit dem Update auf WooCommerce 2.6 hat sich auch die komplette Einstellung für den Versand positiv geändert, es gibt nun viel mehr Möglichkeiten in Bezug auf Versandzonen und Versand-Einstellungen.
Nun hatten wir den Fall für einen Kunden der, wie viele andere Händler wahrscheinlich auch, einen Standard-Versand anbietet, einen kostenlosen Versand ab einem bestimmten Betrag und zusätzlich noch Express-Versand anbieten wollte. Wir haben dazu in den Versandeinstellungen die Abholung vor Ort umbenannt in Express-Versand, denn eine Abholung vor Ort wird nicht angeboten.
Standardmäßig werden aber bei WooCommerce alle anderen Versandarten ausgeblendet, sobald ein kostenloser Versand angeboten wird. Somit wurde in unserem Fall natürlich auch der Express-Versand bzw. die Abholung vor Ort ausgeblendet.
Mit diesem Snippet lässt sich das Problem aber lösen.
// Andere Versandarten anzeigen auch wenn kostenlos verfügbar ist
add_filter('woocommerce_package_rates', 'hide_shipping_when_free_is_available', 10, 2);
function hide_shipping_when_free_is_available($rates, $package) {
$free_yn = 0;
$pickup_yn = 0;
foreach($rates as $key => $value) {
$key_part = explode(":", $key);
$method_title = $key_part[0];
if ('free_shipping' == $method_title) {
// check if free shipping rate exists
$free_yn = 1;
$free_shipping = $rates[$key];
$free_key = $key;
}
if ('local_pickup' == $method_title) {
// check if local pickup rate exists
$pickup_yn = 1;
$local_pickup = $rates[$key];
$pickup_key = $key;
}
}
if ($free_yn == 1) {
// Unset all rates.
$rates = array();
// Restore free shipping rate.
$rates[$free_key] = $free_shipping;
if ($pickup_yn == 1) {
// Restore local pickup rate.
$rates[$pickup_key] = $local_pickup;
}
return $rates;
}
return $rates;
}
Kategoriebeschreibung unterhalb der Produkte darstellen
Die Kategoriebeschreibung in WooCommerce wirdstandardmäßig oben über den Produkten dargestellt. Hat man aber jetzt einen schönen langen SEO-Text geschrieben muss der Kunde erst scrollen bevor er zu den eigentlichen Produkten kommt. In den meisten Fällen liest der Kunde den Text ohnehin nicht 🙂 Mit diesem kleinen Snippet kann man den Text der Kategoribeschreibung unterhalb der Produkte darstellen.
// Kategoriebeschreibung unterhalb der Produkte darstellen remove_action( 'woocommerce_archive_description', 'woocommerce_taxonomy_archive_description', 10 ); add_action( 'woocommerce_after_main_content', 'woocommerce_taxonomy_archive_description', 100 );
Bezeichnung der Versandart im Warenkorb ausblenden
WooCommerce zeigt im Warenkorb zusätzlich noch den Namen der Versandart an. In manchen Fällen sieht das nicht sehr schön aus, da alle anderen Preise im Warenkorb untereinander dargestellt werden, nur nicht der beim Versand. Wer es sich nun erlauben kann, weil er z.B. nur eine Versandart und einen Versandpreis hat, kann mit diesem kleinen Snippet die Versandart ausblenden, „Kostenlose Lieferung“ und „Abholung vor Ort“ sind davon nicht betroffen. Dieses Snippet entfernt nur die Darstellung im Warenkorb, in den Mails und den Bestelldetails wird die Versandart weiterhin dargestellt.
// Bezeichnung der Versandart im Warenkorb ausblenden
add_filter( 'woocommerce_cart_shipping_method_full_label', 'remove_shipping_label', 10, 2 );
function remove_shipping_label($label, $method) {
$new_label = preg_replace( '/^.+:/', '', $label );
return $new_label;
}
Feste Gebühr in Warenkorb und Kasse hinzufügen
Will man eine feste Gebühr für seine Bestellungen erheben, Gründe dafür gibt es viele, kann man dies mit einem kleinen Snippet erreichen. Selbstverständlich werden auch die Steuern für die Gebühr entsprechend berechnet und in die Gebühr wird auch in den Bestelldetails angezeigt.
// Gebühr in Warenkorb und Kasse hinzufügen
function add_checkout_fee() {
global $woocommerce;
// Berbeite den Text "Deine Gebühr" und den Betrag "10"
$woocommerce->cart->add_fee( __('Deine Gebühr', 'woocommerce'), 10 );
}
add_action( 'woocommerce_cart_calculate_fees', 'add_checkout_fee' );
„Was ist Paypal“ entfernen bei der Zahlungsart auf der Kassenseite
Nicht alles macht Sinn und ist auch optisch nicht so schön. Mit diesem kleinen Snippet kannst du den Link „Was ist PayPal“ bei der Zahlungsart Paypal auf deiner Seite Kasse entfernen.
// Was ist Paypal entfernen bei Zahlungsart auf der Seite Kasse
add_filter( 'woocommerce_gateway_icon', 'remove_what_is_paypal', 10, 2 );
function remove_what_is_paypal( $icon_html, $gateway_id ) {
if( 'paypal' == $gateway_id ) {
$icon_html = '<img src="/wp-content/plugins/woocommerce/includes/gateways/paypal/assets/images/paypal.png" alt="PayPal Acceptance Mark">';
}
return $icon_html;
}
Eigenen Text auf der Anmeldeseite hinzufügen
Füttert eure Kunden doch mit zusätzlichen Informationen auf der Anmelden- und Registrieren-Seite. So z.B. über die Vorteile der Registrierung oder was den Kunden alles erwartet wenn er sich eingeloggt hat. Die Möglichkeiten sind mit diesem Snippet nahezu grenzenlos.
// Eigenen Text auf der Anmeldeseite hinzufügen
add_action('woocommerce_login_form_start','add_login_text');
function add_login_text() {
echo '<h3 class="login-subtitle">Überschrift Anmeldung</h3><p class="bb-login-description">Hier kommt dein Text für die Anmeldung hin.</p>';
}
add_action('woocommerce_register_form_start','add_reg_text');
function add_reg_text() {
echo '<h3 class="register-subtitle">Überschrift Registrierung</h3><p class="bb-register-description">Hier kommt dein Text für die Registrierung hin.</p>';
}
Benachrichtigung, wenn ein Produkt im Warenkorb ist
Wenn du deinen Kunden eine Benachrichtigung anzeigen lassen möchtest, sobald ein bestimmtes Produkt im Warenkorb ist, dann kannst du das mit diesem Snippet machen.
// Benachrichtigung im Warenkorb wenn ein bestimmtes Produkt im Warenkorb ist. Suche deine Produkt-ID und ersetze diese einfach.
add_action('woocommerce_before_cart', 'find_product_in_cart');
function find_product_in_cart() {
$product_id = 1796;
$product_cart_id = WC()->cart->generate_cart_id( $product_id );
$in_cart = WC()->cart->find_product_in_cart( $product_cart_id );
if ( $in_cart ) {
$notice = 'Das Produkt mit der ID ' . $product_id . ' ist im Warenkorb und hier kann eine Info hin!';
wc_print_notice( $notice, 'notice' );
}
}
Telefon ist Pflichtfeld
Wenn du auf der Seite Kasse verhindern möchtest, dass das Feld Telefon kein Pflichtfeld ist, dann kannst du dieses Snippet nutzen.
// Telefon kein Pflichtfeld
add_filter( 'woocommerce_billing_fields', 'wc_emoose_filter_phone', 10, 1 );
function wc_emoose_filter_phone( $address_fields ) {
$address_fields['billing_phone']['required'] = false;
return $address_fields;
}
Ersparnis anzeigen im Warenkorb und an der Kasse
Um einen Kunden zum Kauf auf deiner Seite zu überzeugen ist schwer genug. Warum denn nicht mit einem kleinen psychologischen Trick nachhelfen? Sofern der Kunden Produkte im Warenkorb hat die im Angebot sind, wird auf der Seite Warenkorb und Kassen die Gesamtersparnis mit Hilfe dieses Snippets angezeigt.
// Ersparnis anzeigen in Warenkorb und Kasse
function save_wc_discount_total_30() {
global $woocommerce;
$discount_total = 0;
foreach ( $woocommerce->cart->get_cart() as $cart_item_key => $values) {
$_product = $values['data'];
if ( $_product->is_on_sale() ) {
$regular_price = $_product->get_regular_price();
$sale_price = $_product->get_sale_price();
$discount = ($regular_price - $sale_price) * $values['quantity'];
$discount_total += $discount;
}
}
if ( $discount_total > 0 ) {
echo '<tr class="cart-discount">
<th>'. __( 'Deine Ersparnis', 'woocommerce' ) .'</th>
<td data-title=" '. __( 'Deine Ersparnis', 'woocommerce' ) .' ">'
. wc_price( $discount_total + $woocommerce->cart->discount_cart ) .'</td>
</tr>';
}
}
add_action( 'woocommerce_cart_totals_after_order_total', 'save_wc_discount_total_30', 99);
add_action( 'woocommerce_review_order_after_order_total', 'save_wc_discount_total_30', 99);
Zusätzliche Informationen direkt über dem Warenkorb
Die Eigenschaften von Produkten bei WooCommerce werden in dem Tab „Zusätzliche Informationen“ angezeigt. Ist jetzt nicht zwingend logisch und kann auch leicht übersehen werden. Wenn du diese Infos nun direkt über dem Warenkorb-Button darstellt werden diese bestimmt nicht übersehen.
Den überflüssigen Tab kannst du mit Custom CSS ausblenden:
.product .woocommerce-tabs .tabs .additional_information_tab { display:none }
// Zusätzliche Informationen direkt über Warenkorb
add_action ( 'woocommerce_single_product_summary', 'show_attributes', 25 );
function show_attributes() {
global $product;
$product->list_attributes();
}
Prüfung, ob die Hausnummer in der Adresse eingetragen ist
Es ist ärgerlich wenn man eine Bestellung erhält aber der Kunde hat vergessen seine Hausnummer bei der Adresse mit anzugeben. Da entsteht ein zusätzlicher Aufwand für die Nachfrage.
Dieses Snippet behebt das Problem und prüft im Bestellvorgang die Adresszeile 1, sowohl Rechnungs- und Lieferadresse, nach einer Nr. Sollte in dem Feld keine Nummer sein wird eine entsprechende Fehlermeldung ausgegeben.
// Prüfung bei WooCommerce ob Hausnummer bei der Adresse eingetragen wurde
add_action('woocommerce_checkout_process', 'custom_validation_process');
function custom_validation_process()
{
global $woocommerce;
if(isset($_POST['billing_address_1']) and $_POST['billing_address_1'] != '')
{
if (!preg_match('/([0-9]+)/Uis', $_POST['billing_address_1']))
{
if(function_exists('wc_add_notice'))
wc_add_notice( __('Haben Sie die Hausnummer bei der Straße vergessen?'), 'error' );
else
$woocommerce->add_error( __('Haben Sie die Hausnummer bei der Straße vergessen?') );
}
}
if(isset($_POST['ship_to_different_address']))
{
if(isset($_POST['shipping_address_1']) and $_POST['shipping_address_1'] != '')
{
if (!preg_match('/([0-9]+)/Uis', $_POST['shipping_address_1']))
{
if(function_exists('wc_add_notice'))
wc_add_notice( __('Haben Sie die Hausnummer bei der Straße vergessen?'), 'error' );
else
$woocommerce->add_error( __('Haben Sie die Hausnummer bei der Straße vergessen?') );
}
}
}
}
Hinweis auf der Kassenseite je nach Land
Manchmal braucht man eine Lösung um für die Käufer aus dem Ausland einen entsprechenden Hinweis anzuzeigen. Wir nutzen die Funktion z.B. für die kostenlosen Retouren durch PayPal und empfehlen den Käufern mit PayPal zu zahlen.
Dazu eignet sich dieses Snippet, je nach Land der Rechnungsadresse gibt es einen entsprechenden Hinweis aus.
/**
* Hinweis auf Seite Kasse je nach gewähltem Land. Der auzugebenden Text und die Länder können nach Wahl angepasst werden
*/
function add_checkout_notice() {
if ( ! is_ajax() ) {
echo '<p class="checkout_notice" style="color:green;float:left;">Hier kommt der Hinweis hin!</p>';
}
}
add_action( 'woocommerce_review_order_before_cart_contents', 'add_checkout_notice', 10 );
add_action( 'woocommerce_review_order_before_cart_contents', 'show_checkout_notice', 12 );
function show_checkout_notice() {
global $woocommerce;
$msg_states = array( 'AT','BE','DK','FR','IT','HR','LU','PL','CH','SK','SI','ES','CZ' );
if( in_array( WC()->customer->shipping_country, $msg_states ) ) {
echo '<style>.checkout_notice{display:block !important}</style>';
} else {
echo '<style>.checkout_notice{display:none !important}</style>';
}
}
Kategorie „Unkategorisiert“ ausblenden
Mit diesem kleinen Snippet kann man die Kategorie „Unkategorisiert“, die es seit WooCOmmerce 3.0 gibt, im Frontend ausblenden.
// WC 3.3 Kategorie Unkategorisiert ausblenden
add_filter( 'woocommerce_product_subcategories_args', 'custom_woocommerce_product_subcategories_args' );
function custom_woocommerce_product_subcategories_args( $args ) {
$args['exclude'] = get_option( 'default_product_cat' );
return $args;
}
Hinweis „In den Warenkorb gelegt“ ausblenden
Mit diesem kleinen Snippet kann man den Hinweis, dass ein Artikel in den Warenkorb gelegt wurde, ausblenden. Sehr hilfreich wenn man z.B. ein Warenkorb-Widget hat, dann ist der Hinweis überflüssig.
// Hinweis "Artikel in den Warenkorb gelegt" entfernen add_filter( 'wc_add_to_cart_message_html', '__return_false' );
„Warenkorb leeren“ Funktion
Warum sollte man so eine verrückte Funktion anbieten? Ganz einfach, man sollte alles versuchen um seinen Kunden das leben so einfach wie möglich zu machen. Also anstatt jeden Artikel einzeln zu löschen kann man den gesamten Warenkorb nun mit einem einzelnen Klick löschen.
// Warenkorb leeren Funktion
add_action( 'woocommerce_cart_coupon', 'bdev_empty_cart_button' );
function bdev_empty_cart_button() {
echo '<a href="' . esc_url( add_query_arg( 'empty_cart', 'yes' ) ) . '" class="button" title="' . esc_attr( 'Warenkorb leeren', 'woocommerce' ) . '">' . esc_html( 'Warenkorb leeren', 'woocommerce' ) . '</a>';
}
add_action( 'wp_loaded', 'bdev_empty_cart_action', 20 );
function bdev_empty_cart_action() {
if ( isset( $_GET['empty_cart'] ) && 'yes' === esc_html( $_GET['empty_cart'] ) ) {
WC()->cart->empty_cart();
$referer = wp_get_referer() ? esc_url( remove_query_arg( 'empty_cart' ) ) : wc_get_cart_url();
wp_safe_redirect( $referer );
} }
Hinweis „Schnell kaufen bevor ausverkauft“
Wenn man die Lagerbestandsverwaltung in WooCommerce aktiviert hat und den Schwellenwert für den geringen Lagerbestand aktiviert hat, dann ist diese Funktion benutzerfreundlich und animiert zum Kauf.
Sobald der Lagerbestand den Schwellenwert erreicht oder unterschritten hat wird im Frontend beim Produkt ein frei definierbarer Hinweis ausgegeben.
// Hinweis jetzt schnell bestellen bevor ausverkauft. Der Text kann nach Belieben angepasst werden.
add_filter( 'woocommerce_get_availability_text', 'left_stock', 9999, 2 );
function left_stock( $text, $product ) {
$stock = $product->get_stock_quantity();
if ( $product->is_in_stock() && $product->managing_stock() && $stock <= get_option( 'woocommerce_notify_low_stock_amount' ) ) $text .= '. Jetzt schnell bestellen bevor ausverkauft und erst wieder in 7 Tagen wieder auf Lager ist.';
return $text;
}
Anzeige Restbetrag bis kostenloser Versand im Warenkorb
Animiert eure Kunden doch etwas mehr zu kaufen! So z.B. mit einem Hinweis im Warenkorb welcher Betrag noch fehlt bis der Versand kostenlos ist.
// Anzeige Warenkorb Restbetrag bis kostenloser Versand
add_action( 'woocommerce_before_cart', 'free_shipping_cart_notice_zones' );
function free_shipping_cart_notice_zones() {
global $woocommerce;
// Get Free Shipping Methods for Rest of the World Zone & populate array $min_amounts
$default_zone = new WC_Shipping_Zone(0);
$default_methods = $default_zone->get_shipping_methods();
foreach( $default_methods as $key => $value ) {
if ( $value->id === "free_shipping" ) {
if ( $value->min_amount > 0 ) $min_amounts[] = $value->min_amount;
}
}
// Get Free Shipping Methods for all other ZONES & populate array $min_amounts
$delivery_zones = WC_Shipping_Zones::get_zones();
foreach ( $delivery_zones as $key => $delivery_zone ) {
foreach ( $delivery_zone['shipping_methods'] as $key => $value ) {
if ( $value->id === "free_shipping" ) {
if ( $value->min_amount > 0 ) $min_amounts[] = $value->min_amount;
}
}
}
// Find lowest min_amount
if ( is_array($min_amounts) ) {
$min_amount = min($min_amounts);
// Get Cart Subtotal inc. Tax excl. Shipping
$current = WC()->cart->subtotal;
// If Subtotal < Min Amount Echo Notice
// and add "Continue Shopping" button
if ( $current < $min_amount ) {
$added_text = esc_html__('Der Versand in Deutschland ist kostenlos wenn du für weitere ', 'woocommerce' ) . wc_price( $min_amount - $current ) . esc_html__(' einkaufst!', 'woocommerce' );
$return_to = apply_filters( 'woocommerce_continue_shopping_redirect', wc_get_raw_referer() ? wp_validate_redirect( wc_get_raw_referer(), false ) : wc_get_page_permalink( 'shop' ) );
$notice = sprintf( '<a href="%s" class="button wc-forward">%s</a> %s', esc_url( $return_to ), esc_html__( 'Weiter einkaufen', 'woocommerce' ), $added_text );
wc_print_notice( $notice, 'notice' );
}
}
}
WooCommerce Snippet – Zoom Produktbild ausschalten
Das folgende WooCommerce Snippet schaltet die Zoom Funktion und die Lupe im WooCommerce Produktbild aus.
function custom_single_product_image_html( $html, $post_id ) {
$post_thumbnail_id = get_post_thumbnail_id( $post_id );
return get_the_post_thumbnail( $post_thumbnail_id, apply_filters( 'single_product_large_thumbnail_size', 'shop_single' ) );
}
add_filter('woocommerce_single_product_image_thumbnail_html', 'custom_single_product_image_html', 10, 2);
Kostenlos! statt 0 Euro
Als Preis wird in der Produktbeschreibung für das kostenlose Produkt 0 Euro eingegeben. 0 Euro sieht in einem Onlineshop aber nicht gut aus.
Aus diesem Grund gibt es das folgende Snippet, das den Verkaufspreis von 0 Euro in das Wort „kostenlos!“ umwandelt.
add_filter( 'woocommerce_get_price_html', 'wpglorify_price_free_zero_empty', 100, 2 );
function wpglorify_price_free_zero_empty( $price, $product ){
if ( '' === $product->get_price() || 0 == $product->get_price() ) {
$price = 'kostenlos!'; // Text anpassen
}
return $price;
}
einzelne Wörter übersetzen
WooCommerce ist ja zu 100% übersetzt. Allerdings gibt es immer wieder Wörter, die man im Shop gerne anders formulieren würde.
Das Snippet ermöglicht das Anpassen der Übersetzung einzelner Wörter in WooCommerce.
Die Übersetzung bleibt auch nach Updates erhalten.
add_filter('gettext', 'translate_text');
add_filter('ngettext', 'translate_text');
function translate_text($translated) {
$translated = str_ireplace('sale', 'Angebot', $translated); // "sale" und "Angebot" anpassen und bei mehreren Wörtern die Zeile kopieren.
return $translated;
}
WooCommerce Schlagwörter und Kategorie auf der Produktseite ausblenden
remove_action( 'woocommerce_single_product_summary', 'woocommerce_template_single_meta', 40 );
WooCommerce Produkt-Tabs umbenennen
Der folgende Code ermöglicht die Überschrift der WooCommerce Produkt-Tabs „Beschreibung“
„Zusätzliche Informationen“ und „Bewertungen“ anzupassen.
/*
* WooCommerce - Produkt-Tabs umbenennen
* https://wooexperte.de/snippet/woocommerce-produkt-tabs-umbenennen/
*/
add_filter( 'woocommerce_product_tabs', 'woo_rename_tabs', 98 );
function woo_rename_tabs( $tabs ) {
$tabs['description']['title'] = __( 'More Information' ); // Tab Beschreibung
$tabs['reviews']['title'] = __( 'Ratings' ); // Tab Bewertungen
$tabs['additional_information']['title'] = __( 'Product Data' ); // Tab Zusätzliche Informationen
return $tabs;
}
WooCommerce Mindestbestellwert
/*
* WooCommerce - Mindestbestellwert
* https://wooexperte.de/snippet/woocommerce-mindestbestellwert/
*/
add_action( 'woocommerce_checkout_process', 'wc_minimum_order_amount' );
add_action( 'woocommerce_before_cart' , 'wc_minimum_order_amount' );
function wc_minimum_order_amount() {
$minimum = 50; // Hier bitte den Mindestbestellwert eingeben
if ( WC()->cart->total < $minimum ) {
if( is_cart() ) {
wc_print_notice(
sprintf( 'Der Mindestbestellwert beträgt %s pro Bestellung. Der aktuelle Bestellwert beträgt %s.' , // Text anpassen Warenkorb
wc_price( $minimum ),
wc_price( WC()->cart->total )
), 'error'
);
} else {
wc_add_notice(
sprintf( 'Der Mindestbestellwert beträgt %s pro Bestellung. Der aktuelle Bestellwert beträgt %s.' , // Text anpassen Kasse
wc_price( $minimum ),
wc_price( WC()->cart->total )
), 'error'
);
}
}
}
WooCommerce Bestellungen automatisch auf den Status „Fertiggestellt“ stellen
In WooCommerce beeinflussen die Zahlungsarten den Bestellstatus.
Der er Bestellstatus hat dann aber wiederum zum Beispiel Einfluss, ob der Kunde in seinem Kundenkonto auf ein digitales Produkt zugreifen kann oder nicht.
Aus diesem Grund ist es in manchen Shops notwendig alle Bestellungen, unabhängig von der Zahlart auf Fertiggestellt zu stellen. Das vorgestellte WooCommerce Snippet übernimmt diese Aufgabe und stellt alle Bestellungen, unabhängig von Zahlart, auf Fertiggestellt.
/**
* WooCommerce Bestellung immer den Status "Fertiggestellt"
*/
add_action( 'woocommerce_thankyou', 'custom_woocommerce_auto_complete_order' );
function custom_woocommerce_auto_complete_order( $order_id ) {
if ( ! $order_id ) {
return;
}
$order = wc_get_order( $order_id );
$order->update_status( 'completed' );
}
Produkt-Tabs Reihenfolge ändern
Dieser Code ermöglicht die Reihenfolge der Produkt-Tabs in WooCommerce zu ändern. Die Zahl am Ende jeder Zeile bestimmt die Reihenfolge. Zum Ändern der Reihenfolge einfach die Zahl anpassen.
/**
* /**
* WooCommerce - Produkt-Tabs Reihenfolge ändern
* https://wooexperte.de/snippet/woocommerce-produkt-tabs-reihenfolge-aendern/
*/
add_filter( 'woocommerce_product_tabs', 'woo_reorder_tabs', 98 );
function woo_reorder_tabs( $tabs ) {
$tabs['reviews']['priority'] = 5; // Tab Zusätzliche Information - Erste Stelle
$tabs['description']['priority'] = 10; // Tab Beschreibung - Zweite Stelle
$tabs['additional_information']['priority'] = 15; // Tab Bewertungen - Dritte Stelle
return $tabs;
}
Produkt-Tabs deaktivieren
WooCommerce bietet zusätzliche Informationen in Produkt Tabs an, die in der Produktbeschreibung erscheinen.
Beschreibung
Zusätzliche Informationen
Bewertungen
Der folgende Code deaktiviert entweder einzelne WooCommerce Tabs oder alle WooCommerce Tabs auf einmal.
/**
* WooCommerce - Produkt-Tabs deaktivieren
* https://wooexperte.de/snippet/woocommerce-produkt-tabs-reihenfolge-aendern/
*/
function woo_remove_product_tab($tabs) {
unset( $tabs['description'] ); // Entfernt Tab "Beschreibung"
unset( $tabs['reviews'] ); // Entfernt Tab "Bewertung"
unset( $tabs['additional_information'] ); // Entfernt Tab "Zusätzliche Informationen"
return $tabs;
}
add_filter( 'woocommerce_product_tabs', 'woo_remove_product_tab', 98);
Sortierung im WooCommerce Shop deaktivieren
Das folgende Snippet blendet die Standardsortierung im WooCommerce Shop aus.
/**
* Enfernt die WooCommerce Standardsorierung von der Shopseite.
*/
add_action( 'after_setup_theme', 'remove_woocommerce_catalog_ordering', 1 );
function remove_woocommerce_catalog_ordering() {
remove_action( 'woocommerce_before_shop_loop', 'woocommerce_catalog_ordering', 30 ); // Bei Theme Storefront, 30 mit 10 autauschen.
}
Snippet WooCommerce „lokale Abholung“ und „kostenloser Versand“
Dieses Snippet blendet bei „Kostenloser Versand“ und „Abholung vor Ort“ alle anderen Versandarten aus.
/**
* Hide shipping rates when free shipping is available, but keep "Local pickup"
* Updated to support WooCommerce 2.6 Shipping Zones
*/
function hide_shipping_when_free_is_available( $rates, $package ) {
$new_rates = array();
foreach ( $rates as $rate_id => $rate ) {
// Only modify rates if free_shipping is present.
if ( 'free_shipping' === $rate->method_id ) {
$new_rates[ $rate_id ] = $rate;
break;
}
}
if ( ! empty( $new_rates ) ) {
//Save local pickup if it's present.
foreach ( $rates as $rate_id => $rate ) {
if ('local_pickup' === $rate->method_id ) {
$new_rates[ $rate_id ] = $rate;
break;
}
}
return $new_rates;
}
return $rates;
}
add_filter( 'woocommerce_package_rates', 'hide_shipping_when_free_is_available', 10, 2 );
Shop-Seite Titel entfernen
/* * WooCommerce - Shop Titel entfernen * https://wooexperte.de/snippet/shop-titel-entfernen/ */ add_filter( 'woocommerce_show_page_title', '__return_false' );
Prozentuale Gebühr ab oder bis zu einem bestimmten Warenwert
Das folgende Snippet erstellt eine % Gebühr im WooCommerce Warenkorb. Zusätzlich ermöglich das Snippet einzustellen, ab welchen (oder bis welchem) Warenwert die Gebühr berechnet wird.
/**
* Prozentuale Gebühr im WooCommerce Warenkorb
*/
add_action( 'woocommerce_cart_calculate_fees', 'custom_fee_based_on_cart_total', 10, 1 );
function custom_fee_based_on_cart_total( $cart_object ) {
if ( is_admin() && ! defined( 'DOING_AJAX' ) ) return;
// The percetage
$percent = 5; // 5%
// The cart total
$cart_total = $cart_object->cart_contents_total;
// The conditional Calculation
$fee = $cart_total >= 50 ? $cart_total * $percent / 100 : 0;
if ( $fee != 0 )
$cart_object->add_fee( __( "5 % Gebühr", "woocommerce" ), $fee, false );
}
Produkte einer bestimmten Kategorie in WooCommerce ausblenden
Dieses Snippet blendet alle Produkte einer Kategorie in WooCommerce aus.
Das Produkt steht trotzdem weiterhin im Shop zum Verkauf und kann über die Suche gefunden werden.
/**
* Produkte einer bestimmten Kategorie von der Shop Seite entfernen
*/
function custom_pre_get_posts_query( $q ) {
$tax_query = (array) $q->get( 'tax_query' );
$tax_query[] = array(
'taxonomy' => 'product_cat',
'field' => 'slug',
'terms' => array( 'Kategorie' ), // "Kategorie" gegen Kategorie im Shop austauschen.
'operator' => 'NOT IN'
);
$q->set( 'tax_query', $tax_query );
}
add_action( 'woocommerce_product_query', 'custom_pre_get_posts_query' );
Neues Produkt-Tab hinzufügen
Über das Snippet ein allgemeines Produkt-Tab in WooCommerce hinzuzufügen. Die in diesem Produkt-Tab hinterlegten Informationen erscheinen in allen Produktbeschreibungen.
/*
* WooCommerce - Neues Produkt-Tab hinzufügen
* https://wooexperte.de/snippet/neues-produkt-tab-hinzufuegen/
*/
add_filter( 'woocommerce_product_tabs', 'woo_new_product_tab' );
function woo_new_product_tab( $tabs ) {
// Inhalt Produkt-Tab
$tabs['test_tab'] = array(
'title' => __( 'Neues Produkt Tab', 'woocommerce' ), // Beschriftung Tab
'priority' => 50,
'callback' => 'woo_new_product_tab_content'
);
return $tabs;
}
function woo_new_product_tab_content() {
// Inhalt Produkt Tab
echo '<h2>Überschrift Produkt-Tab</h2>'; // Überschrift Tab
echo '<p>Text Produkt-Tab</p>'; // Text Tab
}
Kunde, statt in den Warenkorb, auf eine benutzerdefinierte Seite umleiten
Im Regelfall landet der Kunde in #WooCommerce nach Auswahl eines Produktes im Warenkorb.
Dieses WooCommerce Snippet ermöglicht, nach Auswahl des Produktes, die Weiterleitung auf eine individuelle Seite. Zum Beispiel für Werbezwecke oder für zusätzliche Aktionen oder Rabatte.
/**
* Redirect Kunden nach dem Hinzufügen von Produkt in den Warenkorb.
*/
function my_custom_add_to_cart_redirect( $url ) {
$url = get_permalink( 1 ); // URL zum Weiterleiten an (1 austauschen gegen Seiten-ID)
return $url;
}
add_filter( 'woocommerce_add_to_cart_redirect', 'my_custom_add_to_cart_redirect' );
Festgelegte Produktkategorie in der Seitenleiste ausblenden
Es gibt immer wieder Gründe Produkte oder Kategorien in WooCommerce auszublenden.
Das folgende Snippet blendet eine zuvor festgelegte Produktkategorie in der Seitenleiste aus.
add_filter( 'woocommerce_product_categories_widget_args', 'wdm_edit_product_cat_widget_args' );
function wdm_edit_product_cat_widget_args( $cat_args ) {
$cat_args['exclude'] = array('20'); // Produkt ID (20) austauschen
return $cat_args;
}
Button „Weiter Einkaufen“ im Warenkorb
Das Snippet erzeugt im WooCommerce Warenkorb einen permanenten Button „Weiter Einkaufen“ . Das Design des Buttons hängt von dem eingesetzten Theme ab.
add_action('woocommerce_proceed_to_checkout', function() {
?>
<a href="https://Meine_Domain.de" class="button">Weiter einkaufen</a>
<?php
});
Bestellmenge direkt auf der WooCommerce Shopseite und WooCommerce Archivseite
Das folgende Snippet fügt auf der WooCommerce Shop- und Archivseite die Mengeneingabe für das Produkt hinzu.
Der Kunde kann also direkt über den WooCommerce Shop eine größere Anzahl bestellen und muss nicht extra die Produktseite aufrufen.
/**
* Bestellmenge auf der WooCommerce Archivseite
*/
add_filter( 'woocommerce_loop_add_to_cart_link', 'quantity_inputs_for_woocommerce_loop_add_to_cart_link', 10, 2 );
function quantity_inputs_for_woocommerce_loop_add_to_cart_link( $html, $product ) {
if ( $product && $product->is_type( 'simple' ) && $product->is_purchasable() && $product->is_in_stock() && ! $product->is_sold_individually() ) {
$html = '<form action="' . esc_url( $product->add_to_cart_url() ) . '" class="cart" method="post" enctype="multipart/form-data">';
$html .= woocommerce_quantity_input( array(), $product, false );
$html .= '<button type="submit" class="button alt">' . esc_html( $product->add_to_cart_text() ) . '</button>';
$html .= '</form>';
}
return $html;
}
Ausblenden der Produktanzahl bei den WooCommerce Kategorien
Bei dem Anzeigen der Produktkategorien wird die Anzahl der in der Kategorie enthaltenen Produkten angezeigt.
Durch Eingabe und Aktivierung des Snippets, verschwindet die Anzahl der Produkte bei der Anzeige der Kategorien.
/** * Ausblenden der Produktanzahl bei den WooCommerce Kategorien */ add_filter( 'woocommerce_subcategory_count_html', '__return_false' );
Anzeige “Angebot!” ausblenden?
Das folgende WooCommerce Snippet blendet das Hinweisschild „Sale“ oder „Angebot“ bei reduzierten Produkten auf der Shop- oder Archivseite in WooCommerce aus.
remove_action( 'woocommerce_before_shop_loop_item_title', 'woocommerce_show_product_loop_sale_flash', 10 ); remove_action( 'woocommerce_before_single_product_summary', 'woocommerce_show_product_sale_flash', 10 );
Andere Versandarten bei „Kostenloser Lieferung“ ausblenden
Das folgende Snippet blendet in WooCommerce andere Versandarten aus, wenn der kostenlose Versand im Warenkorb zur Verfügung steht.
/**
* Hide shipping rates when free shipping is available.
* Updated to support WooCommerce 2.6 Shipping Zones.
*
* @param array $rates Array of rates found for the package.
* @return array
*/
function my_hide_shipping_when_free_is_available( $rates ) {
$free = array();
foreach ( $rates as $rate_id => $rate ) {
if ( 'free_shipping' === $rate->method_id ) {
$free[ $rate_id ] = $rate;
break;
}
}
return ! empty( $free ) ? $free : $rates;
}
add_filter( 'woocommerce_package_rates', 'my_hide_shipping_when_free_is_available', 100 );
WooCommerce – die Anzahl der Produkte pro Seite ändern
Manchmal möchte man in der Hauptansicht eines WooCommerce Shops die Anzahl der Produkte ändern.
Dazu einfach folgenden Code in die Datei functions.php des WordPress-Themes einfügen und ggf. anpassen.
Die Anzahl der Produkte pro Reihe ändern
// WooCommerce Produkte Anzahl pro Reihe aendern
add_filter('loop_shop_columns', 'loop_columns');
if (!function_exists('loop_columns')) {
function loop_columns() {
// return 3; // die Anzahl auf 3 Produkte pro Reihe einstellen
return 3; // 3 Produkte pro Reihe
}
}
Anzahl der angezeigten Produkte pro Seite ändern
// WooCommerce Produkte Anzahl pro Seite aendern
add_filter( 'loop_shop_per_page', 'new_loop_shop_per_page', 24 );
function new_loop_shop_per_page( $cols ) {
// $cols enthält die aktuelle Anzahl der Produkte pro Seite basierend auf den Einstellungen unter
// return 9; // die Anzahl auf 9 Produkte pro Seite einstellen
$cols = 9;
return $cols;
}
Möchte man 12 Produkte pro Seite anzeigen, dann ändert man den Wert auf $cols = 12;
Voraussetzung: In den WordPress Einstellungen unter Design – Customizer – WooCommerce > Produktkatalog muss die Einstellung auf “Produkte anzeigen” eingestellt sein.
Ändern der maximalen Anzahl von Produkten auf der Shop-Seite
Wer alle seine Produkte auf der WooCommerce Shop-Seite anzeigen lassen will, kann den folgenden Code in der functions.php Datei des WordPress-Themes verwenden. Nützlich wenn man keine Pagination dort haben will (keine Seitennummerierung).
// WooCommerce Maximale Anzahl der Produkte auf der Shopseite aendern
add_filter( 'loop_shop_per_page', 'new_loop_shop_per_page', 20 );
function new_loop_shop_per_page( $products ) {
// die Anzahl der Produkte, die Sie pro Seite anzeigen möchten. Hier 100 Produkte.
$products = 100;
return $products;
}
Verwende eine eigene Sidebar auf den Shopseiten
Circa 95% aller Entwickler wissen nicht, wie man diese Anforderung ohne ein Überschreiben von WooCommerce-Templates lösen kann. Du wirst auch im Internet kaum eine Lösung für dieses Problem finden, denn auch dort wird dir ein Überschreiben der Templates vorgeschlagen.
Daher lernst du heute ein Geheimnis von mir 🙂 Denn ab sofort löst du das Problem wie ein Jedi-Meister, und nicht wie ein Padawan.
Teil 1 – lege eine neue Sidebar für die Woocommerce Seiten an
if (!function_exists( 'evolution_woo_sidebar_init' ) ) :
/**
* Eine neue Sidebar nur für die Shop-Seiten registrieren
*/
function evolution_woo_sidebar_init() {
register_sidebar( array(
'name' => esc_html__( 'WooCommerce Sidebar', 'evolution' ),
'id' => 'woocommerce',
'description' => esc_html__( 'Dies ist die Sidebar für deinen WooCommerce Shop.', 'evolution' ),
'before_widget' => '<aside id="%1$s" class="widget %2$s">',
'after_widget' => '</aside>',
'before_title' => '<h4 class="widget-title">',
'after_title' => '</h4>',
) );
}
add_action( 'widgets_init', 'evolution_woo_sidebar_init' );
endif;
Teil 2 – lege eine WooCommerce-Sidebar Datei an
Damit die neue Sidebar auch genutzt werden kann, benötigen wir eine neue Theme-Datei. Lege eine leere Datei mit dem Namen sidebar-woocommerce.php an. Dazu nutzt du bitte einen HTML-Editor.
Die HTML-Container übernimmst du aus deiner sidebar.php. Füge nun den folgenden Code in die Datei ein und lade sie per (S)FTP in deinen Theme- oder Child-Theme-Ordner hoch.
<?php
/**
* The sidebar containing the woocommerce widget area.
*
* @package Evolution Framework
*/
if ( ! is_active_sidebar( 'woocommerce' ) ) {
return;
}
?>
<?php // Wichtig: die HTML-Container kopierst du aus deiner sidebar.php ?>
<div id="secondary" class="sidebar-area" role="complementary">
<div class="normal-sidebar widget-area">
<?php if ( is_active_sidebar( 'woocommerce' ) ) : ?>
<?php dynamic_sidebar( 'woocommerce' ); ?>
<?php endif; ?>
</div><!-- .normal-sidebar -->
</div><!-- #secondary -->
Teil drei: Tausche auf den Shop-Seiten die Sidebars aus
Für den Austausch der beiden Sidebars sorgt die Original-Funktion des WooCommerce-Frameworks. Diese Funktionen wurden alle »Pluggable« geschrieben. Das bedeutet, das man diese Funktionen leicht überschreiben kann.
Eine überschreibbare Funktion sieht so aus:
<?php
if (!function_exists( 'eine_tolle_funktion' ) ) :
/**
* Eine Funktion ueberschreibbar machen
*/
function eine_tolle_funktion() {
}
add_action( 'tolle_funktion', 'eine_tolle_funktion' );
endif;
Das if (!function_exists( ‚eine_tolle_funktion‘ ) ) : sagt aus, das die Funktion nur ausgeführt wird, falls es noch keine Funktion dieses Namens geben sollte. Existiert hingegen eine Funktion dieses Namens bereits, wird die Funktion nicht ausgeführt. Das sorgt dafür, dass du diese Funktionen leicht überschreiben kannst. Und genau das werden wir nun tun.
Teil 4 – die Sidebar tauschen: Das Snippet
Das folgende Snippet sorgt dafür, dass auf deinen Shop-Seiten nun die WooCommerce-Sidebar anstatt der normalen Sidebar angezeigt wird.
<?php
/**
* Get the spezial sidebar for the WooCommerce Templates
* DO NOT CHANGE THIS FUNCTION, or the WooCommerce Sidebar will not work.
*
* @overrides the woocommerce function
*
* @hooked woocommerce_sidebar()
*/
function woocommerce_get_sidebar() {
get_template_part( 'sidebar-woocommerce' );
}
Nun wird auf allen Shop-Seiten die Datei sidebar-woocommerce.php anstatt deiner sidebar.php aufgerufen und du kannst beide Sidebars mit verschiedenen Inhalten bestücken.
WooCommerce-Checkout: Mache aus der Telefonnummer eine freiwillige Angabe
Die Angabe der Telefonnummer beim Checkout ist ein Pflichtfeld. Das wird mit Sicherheit einigen potenziellen Kunden nicht gefallen. Daher sorgt das folgende Snippet dafür, das diese Angabe freiwillig ist.
if (!function_exists( 'evolution_phone_no_pflicht' ) ) :
/**
* Make the phone number a optional entry
*
* @hooked woocommerce_billing_fields()
*
* @return filter
*/
function evolution_phone_no_pflicht( $address_fields ) {
$address_fields['billing_phone']['required'] = false;
return $address_fields;
}
add_filter( 'woocommerce_billing_fields', 'evolution_phone_no_pflicht', 10, 1 );
endif;
Produkt Tabs auf der Produkt-Ansicht entfernen
Die Tabs lassen sich entweder einzeln oder alle zusammen entfernen, was manchmal von Vorteil sein kann.
if (!function_exists( 'evolution_remove_product_tabs' ) ) :
/**
* Wir entfernen die Produkt-Tabs der Beschreibung
*
* @hooked woocommerce_product_tabs()
*/
function evolution_remove_product_tabs( $tabs ) {
unset( $tabs['description'] ); // Remove the description tab
unset( $tabs['reviews'] ); // Remove the reviews tab
unset( $tabs['additional_information'] ); // Remove the additional information tab
return $tabs;
}
add_filter( 'woocommerce_product_tabs', 'evolution_remove_product_tabs', 98 );
endif;
Live Update des Warenkorbs mit Ajax
Du musst den Warenkorb nicht ständig neu laden, um ihn aktuell zu halten. Das lässt sich viel besser mittels Ajax »Live« erledigen.
if (!function_exists( 'evolution_header_add_to_cart_fragment' ) ) :
/**
* Ensure cart contents update when products are added to the cart via AJAX
*
* @add_filter woocommerce_add_to_cart_fragments
*/
function evolution_header_add_to_cart_fragment( $fragments ) {
ob_start();
?>
<a class="cart-contents" href="<?php echo WC()->cart->get_cart_url(); ?>" title="<?php _e( 'View your shopping cart' ); ?>"><?php echo sprintf (_n( '%d item', '%d items', WC()->cart->get_cart_contents_count() ), WC()->cart->get_cart_contents_count() ); ?> - <?php echo WC()->cart->get_cart_total(); ?></a>
<?php
$fragments['a.cart-contents'] = ob_get_clean();
return $fragments;
}
add_filter( 'woocommerce_add_to_cart_fragments', 'evolution_header_add_to_cart_fragment' );
endif;
Ändere die Anordnung der Felder im Kassenbereich
Mit Hilfe dieses Snippet kannst du den Kassenbereich im WooCommerce Checkout anpassen. Du kannst die Reihenfolge der Felder im Kassenbereich ändern oder sie auch entfernen.
if (!function_exists( 'evolution_reorder_woo_fields' ) ) :
/**
* Aendere die Reihenfolge der Felder im Kassenbereich oder entferne sie komplett.
*
* @add_filter woocommerce_checkout_fields
*/
function evolution_reorder_woo_fields( $fields ) {
//move these around in the order you'd like
$fields2['billing']['billing_first_name'] = $fields['billing']['billing_first_name'];
$fields2['billing']['billing_last_name'] = $fields['billing']['billing_last_name'];
$fields2['billing']['billing_company'] = $fields['billing']['billing_company'];
$fields2['billing']['billing_address_1'] = $fields['billing']['billing_address_1'];
$fields2['billing']['billing_address_2'] = $fields['billing']['billing_address_2'];
$fields2['billing']['billing_city'] = $fields['billing']['billing_city'];
$fields2['billing']['billing_postcode'] = $fields['billing']['billing_postcode'];
$fields2['billing']['billing_state'] = $fields['billing']['billing_state'];
$fields2['billing']['billing_country'] = $fields['billing']['billing_country'];
$fields2['billing']['billing_email'] = $fields['billing']['billing_email'];
$fields2['billing']['billing_phone'] = $fields['billing']['billing_phone'];
//just copying these (keeps the standard order)
$fields2['shipping'] = $fields['shipping'];
$fields2['account'] = $fields['account'];
$fields2['order'] = $fields['order'];
return $fields2;
}
add_filter( 'woocommerce_checkout_fields', 'evolution_reorder_woo_fields' );
endif;
Leere Kategorien ausblenden
By default, the WordPress wp_list_categories function will…get a list of categories. Surprising, I know. It will also even exclude empty categories if you want, meaning if a category has no items belonging to it, it will not display it.
It’s awesome, I really dig this function. The Woocommerce Product Categories Widget uses it to display a list of categories for your Woocommerce products. It will even hide categories that do not have any products in them, much like the the default behavior for post categories, etc.
Where it doesn’t always work though, is when the product is published, but isn’t visible, due to stock or backorder status…so here’s a quick function that will look at the categories in the product list, find the products in the category, and if none of the products are visible, it will not display the category in the widget
/**
Plugin Name: WooCommerce - Exclude empty categories from widget
Plugin URI: https://chrisk.io/woocommerce-hide-categories-with-no-visible-products-in-the-product-category-widget/
Description: Excludes categories with no visible products from the WooCommerce category list
Version: 0.1
Author: Chris Klosowski
Author URI: https://chrisk.io
*/
/**
* Exclude categories with no visible products from the category list
*
* @param array $category_list_args Array of wp_list_categories parameters
* @return array Addition of exclude if items are not visible
*/
function kfg_exclude_categories_from_widget( $category_list_args ) {
$args = array(
'hide_empty' => false,
'hierarchical' => true,
);
$product_categories = get_terms( 'product_cat', $args );
$exclude = array();
foreach ( $product_categories as $category ) {
$posts = get_posts( array( 'post_type' => 'product', 'posts_per_page' => -1, 'product_cat' => $category->slug, 'fields' => 'ids' ) );
$show_category = false;
foreach ( $posts as $post ) {
$product = new wC_Product( $post );
$visible_product = $product->is_visible();
if ( true === $visible_product ) {
$show_category = true;
break;
}
}
if ( false === $show_category ) {
$exclude[] = $category->term_id;
}
}
if ( ! empty( $exclude ) ) {
$category_list_args['exclude'] = implode( ',', $exclude );
unset( $category_list_args['include'] );
}
return $category_list_args;
}
add_filter( 'woocommerce_product_categories_widget_args', 'kfg_exclude_categories_from_widget', 10, 1 );
Oxyelements > Main Template Anzahl Produkte im Einkaufswagen Icon
add_filter( 'woocommerce_add_to_cart_fragments', 'oe_cart_count_fragments', 1, 1 );
function oe_cart_count_fragments( $fragments ) {
$fragments['div.header-cart-count'] = '<div class="header-cart-count" data-cart-count="' .
WC()->cart->get_cart_contents_count() . '">' .
WC()->cart->get_cart_contents_count() . '</div>';
return $fragments;
} 




































