Code Snippets

Snippet - Prüfe ob Kunde Artikel im Besitz

Beschreibung:

Prüfe ob Kunde Artikel im Besitz, und gebe das beim Artikel aus.

Code:

add_action('woocommerce_before_single_product', function() {
    if (!is_user_logged_in()) {
        echo '<div style="padding:10px;background:#ffeeba;border-left:5px solid #f0ad4e;margin-bottom:15px;">
                🔒 Du bist nicht eingeloggt. Eine Besitzprüfung ist nicht möglich.
              </div>';
        return;
    }

    global $product;
    $user_id = get_current_user_id();
    $product_id = $product->get_id();

    $owns_product = wc_customer_bought_product('', $user_id, $product_id);

    if ($owns_product) {
        echo '<div style="padding:10px;background:#d4edda;border-left:5px solid #28a745;margin-bottom:15px;">
                ✅ Du besitzt dieses Produkt bereits.
              </div>';
    } else {
        echo '<div style="padding:10px;background:#f8d7da;border-left:5px solid #dc3545;margin-bottom:15px;">
                ❌ Du besitzt dieses Produkt nicht.
              </div>';
    }
});

Ausführung:

Wenn man nicht eingeloggt ist bekommt man diese Meldung:

grafik.png

Wenn man eingeloggt ist, diese wenn gekauft

grafik.png

und wenn man es noch nicht besitzt

grafik.png

Man kann sich überlegen ob man sich die Ausgabe, das man es nicht besitzt spart. In dem Man dieses wieder auskommentiert bzw. den else block entfernt. Genauso wie die Prüfung ob eingeloggt, kann man auch entfernen wenn es nervt oder man nicht haben will.

 

 

 

Snippet - Wenn Kunde Produkt aus kategorie in Besitz hat ist dieses nicht mehr kaufbar

Beschreibung:

Wenn ein Kunde ein Produkt aus einer Kategorie im Besitz hat, sprich schon mal gekauft hat, kann er diesen Artikel nicht nochmals erwerben. Die menge Beschreibungsfelder etc. und in den Warenkorb werden via CSS ausgeblendet.
Auch hier kann wieder entschieden werden, welche Sachen angezeigt werden sollen.
Was nicht gebraucht wird, löschen oder auskommentieren.

Code:

// Besitzprüfung + Hinweis + optional Kauf verhindern
add_action('woocommerce_before_single_product', function() {
    if (!is_user_logged_in()) {
        echo '<div style="padding:10px;background:#ffeeba;border-left:5px solid #f0ad4e;margin-bottom:15px;">
                🔒 Du bist nicht eingeloggt. Eine Besitzprüfung ist nicht möglich.
              </div>';
        return;
    }

    global $product;
    $user_id = get_current_user_id();
    $product_id = $product->get_id();
    $owns_product = wc_customer_bought_product('', $user_id, $product_id);
    $has_category = has_term('Homepagevorlagen', 'product_cat', $product_id);

    if ($owns_product) {
        echo '<div style="padding:10px;background:#d4edda;border-left:5px solid #28a745;margin-bottom:15px;">
                ✅ Du besitzt dieses Produkt bereits.
              </div>';

        if ($has_category) {
            echo '<div style="padding:10px;background:#fff3cd;border-left:5px solid #ffeeba;margin-bottom:15px;">
                    🛑 Du besitzt dieses Produkt bereits und es gehört zur Kategorie „Homepagevorlagen“. Ein erneuter Kauf ist nicht möglich.
                  </div>';

            // Dynamisch CSS einfügen, um Kaufbereich auszublenden
            add_action('wp_head', function() {
                echo '<style>
                    body.woocommerce.single-product .cart,
                    body.woocommerce.single-product .quantity,
                    body.woocommerce.single-product form.cart {
                        display: none !important;
                    }
                </style>';
            });
        }
    } else {
        echo '<div style="padding:10px;background:#f8d7da;border-left:5px solid #dc3545;margin-bottom:15px;">
                ❌ Du besitzt dieses Produkt nicht.
              </div>';
    }
});

 

Snippet - Wenn Kunde ein explicites Produkt in Besitz hat ist dieses nicht mehr kaufbar

Beschreibung:

Wenn ein Kunde ein bestimmtes Produkt im Besitz hat, sprich schon mal gekauft hat, kann er diesen Artikel nicht nochmals erwerben. Die menge Beschreibungsfelder etc. und in den Warenkorb werden via CSS ausgeblendet.
Auch hier kann wieder entschieden werden, welche Sachen angezeigt werden sollen.
Was nicht gebraucht wird, löschen oder auskommentieren. Unter target_product_id die id des produktes eintragen

Code:

add_action('woocommerce_before_single_product', function() {
    if (!is_user_logged_in()) {
        echo '<div style="padding:10px;background:#ffeeba;border-left:5px solid #f0ad4e;margin-bottom:15px;">
                🔒 Du bist nicht eingeloggt. Eine Besitzprüfung ist nicht möglich.
              </div>';
        return;
    }

    global $product;
    $user_id = get_current_user_id();
    $product_id = $product->get_id();
    $owns_product = wc_customer_bought_product('', $user_id, $product_id);

    // Hier deine Ziel-Produkt-ID eintragen
    $target_product_id = 1234;

    if ($owns_product) {
        echo '<div style="padding:10px;background:#d4edda;border-left:5px solid #28a745;margin-bottom:15px;">
                ✅ Du besitzt dieses Produkt bereits.
              </div>';

        if ($product_id == $target_product_id) {
            echo '<div style="padding:10px;background:#fff3cd;border-left:5px solid #ffeeba;margin-bottom:15px;">
                    🛑 Du besitzt dieses Produkt bereits. Ein erneuter Kauf ist nicht möglich.
                  </div>';

            // Kaufbereich via CSS ausblenden
            add_action('wp_head', function() {
                echo '<style>
                    body.woocommerce.single-product .cart,
                    body.woocommerce.single-product .quantity,
                    body.woocommerce.single-product form.cart {
                        display: none !important;
                    }
                </style>';
            });
        }
    } else {
        echo '<div style="padding:10px;background:#f8d7da;border-left:5px solid #dc3545;margin-bottom:15px;">
                ❌ Du besitzt dieses Produkt nicht.
              </div>';
    }
});

Snippet - Umleitung externer DNS name auf internen Docker instance - service Namen

Beschreibung:

Damit der WP Cron Dienst in Verbindung mit Caddy im Docker funktioniert, müssen der Externe DNS Name auf den internen Namen umgeleitet werden. Hier heißt der Service Name wordpress, dieser ist in der Docker compose Datei zu finden.

Code:

add_filter('cron_request', function($cron_request) {
    // Ersetze die externe HTTPS-Adresse durch den internen HTTP-Service-Namen
    $cron_request['url'] = str_replace('https://deine-externe-domain.de', 'http://wordpress', $cron_request['url']);
    return $cron_request;
});

 

Snippet - Artikel als neue Position im Warenkorb mit Textfeld aus Acowebs Product Addons

Beschreibung:

Es gibt Artikel die mehrmal in den Warenkorb gelegt werden sollen, aber nicht gestapelt sondern als einzelne Position immer aufgelistet werden sollen, da sie Custom fields beinhalten.
Hier aus dem Plugin Acowebs Product Addons, für Benutzerdefinierte Felder.

Herausfinden des Feldnamens:

Die Artikelseite Aufrufen. Rechtklcik in das Textfeld und auf untersuchen klicken

grafik.png

grafik.png

Hier in type="url" name="url_3112976778"

url_3112976778 ist der Wert der uns später interessiert.

grafik.png

Snippet

In dem Beispiel haben wir url_3112976778 gelassen damit man weiß wo es rein muss

Diese beiden Werte in der POST setzen

$cart_item_data['addon-domain'] = sanitize_text_field($_POST['url_3112976778']);
$cart_item_data['unique_key'] = md5($_POST['url_3112976778'] . microtime());

add_filter('woocommerce_add_cart_item_data', 'force_unique_addon_domain_items', 10, 2);
function force_unique_addon_domain_items($cart_item_data, $product_id) {
    if (!empty($_POST['url_3112976778'])) {
        $cart_item_data['addon-domain'] = sanitize_text_field($_POST['url_3112976778']);
        $cart_item_data['unique_key'] = md5($_POST['url_3112976778'] . microtime());
    }
    return $cart_item_data;
}


/*add_filter('woocommerce_get_item_data', 'show_domain_in_cart', 10, 2);
function show_domain_in_cart($item_data, $cart_item) {
    if (isset($cart_item['addon-domain'])) {
        $item_data[] = array(
            'key' => 'Domain',
            'value' => esc_html($cart_item['addon-domain']),
        );
    }
    return $item_data;
}*/

add_action('woocommerce_add_order_item_meta', 'store_domain_in_order_meta', 10, 3);
function store_domain_in_order_meta($item_id, $values, $cart_item_key) {
    if (isset($values['addon-domain'])) {
      wc_add_order_item_meta($item_id, 'Domain', $values['addon-domain']);
    }
}

Ergebnis:

grafik.png

✅ Snippet - Mengenfeld gezielt ausblenden, über Productid oder Kategorie ausblenden - DEFEKT

Beschreibung:

Mengenfeld gezielt ausblenden, über Productid oder Kategorie ausblenden.

Snippet:

add_action('wp_head', 'hide_quantity_field_conditionally');

function hide_quantity_field_conditionally() {
    // === KONFIGURATION ===

    // Aktivieren oder deaktivieren
    $check_by_product_id = true;
    $check_by_category   = true;

    // Produkt-IDs (nur wenn $check_by_product_id = true)
    $product_ids = array(42, 99); // <-- hier deine Produkt-IDs eintragen

    // Kategorie-Slugs (nur wenn $check_by_category = true)
    $category_slugs = array('zusatzartikel', 'einzeldomain'); // <-- Slugs deiner Kategorien

    // === PRODUKTSEITE ===
    if (is_product()) {
        global $product;
        $hide = false;

        if ($check_by_product_id && in_array($product->get_id(), $product_ids)) {
            $hide = true;
        }

        if ($check_by_category && has_term($category_slugs, 'product_cat', $product->get_id())) {
            $hide = true;
        }

        if ($hide) {
            echo '<style>
                .woocommerce div.product form.cart .quantity {
                    display: none !important;
                }
            </style>';
        }
    }

    // === WARENKORB ===
    if (is_cart()) {
        $hide = false;

        foreach (WC()->cart->get_cart() as $cart_item) {
            $product = $cart_item['data'];

            if (
                ($check_by_product_id && in_array($product->get_id(), $product_ids)) ||
                ($check_by_category && has_term($category_slugs, 'product_cat', $product->get_id()))
            ) {
                $hide = true;
                break;
            }
        }

        if ($hide) {
            echo '<style>
                .woocommerce-cart table.cart td.product-quantity .quantity {
                    display: none !important;
                }
            </style>';
        }
    }
}

Snippet - Verlinkte Produkte auf Produktseite anzeigen

Beschreibung:

Unter Produktbeschreibung Verlinkte Produkte anzeigen.

So ohne Snippet:

image.png

So mit Snippet

image.png

Welche Produkte werden angezeigt?
Die, die verlinkt werden:

image.png

Installation:

Code Snippet in die function.php oder über Snippet Manager Plugin

add_action('woocommerce_after_single_product_summary', 'show_crosssells_on_product_page', 16);

function show_crosssells_on_product_page() {
    global $product;
    $crosssell_ids = $product->get_cross_sell_ids();
    
    if (!empty($crosssell_ids)) {
        echo '<section class="cross-sells"><h2>Das könnte dich auch interessieren</h2>';
        $args = array(
            'post_type' => 'product',
            'posts_per_page' => 4,
            'post__in' => $crosssell_ids,
            'orderby' => 'post__in'
        );
        woocommerce_product_loop_start();
        $products = new WP_Query($args);
        while ($products->have_posts()) {
            $products->the_post();
            wc_get_template_part('content', 'product');
        }
        woocommerce_product_loop_end();
        wp_reset_postdata();
        echo '</section>';
    }
}