Plugins
- Addon - Flexible Product Fields
- Addon - Product Addons for Woocommerce – Product Options with Custom Fields
- Addon - Code Snippet
- Addon - WooCommerce Product Dependencies
- Addon - Checkout Field Editor (Checkout Manager)
- Addon - Custom Order Numbers for WooCommerce
- Addon - WooCommerce E-Invoicing Customizer
- Addon - WP Mail SMTP by WPForms – The Most Popular SMTP and Email Log Plugin
- Addon - Germanized Pro für WooCommerce
- Addon - WP Control
- Addon - WP-DBManager
- Addon - Redis Cache
Addon - Flexible Product Fields
Beschreibung:
Ein Plugin um einen Artikel mit weiteren Feldern auszustatten
Woocommerce Plugin Seite :
https://de.wordpress.org/plugins/flexible-product-fields/
Mit diesem Addon kann man weitere Felder zum Produkt hinzufügen.
konfigurierbar unter Plugins einstellungen.
Dort kann die Eigenschaft an Produkt oder eine Kategorie gepackt werden.
produkt auswählen und dann Feldeigenschaft whälen und Feld Namen geben fertig ;-)
Und schon gibts ein Feld beim Artikel
Addon - Product Addons for Woocommerce – Product Options with Custom Fields
Beschreibung:
Ein weiteres Plugin was zusätzliche Felder zu einem Produkt hinzufügen kann.
bei diesem ist der Vorteil man kann es über ganze Kategorien packen, bei dem vorherigen musste man jedes Produkt einzeln aufführen, und die Beschreibung sieht auch besser aus
https://de.wordpress.org/plugins/woo-custom-product-addons/
Einrichtung:
Unter Plugin auf create Forms klicken
Dort kann man oben eon neues Form erstellen
Unten weiter stehen schon bestehende Forms.
Ein Form ist für einen Artikel gedacht, ein Form kann natürlich mehrere Felder haben
Hier gehen wir in die Details eines Forms, das ist das gleiche als wenn wir ein neues erstellen würden.
Oben der Title zusätzliche Domain, dieser taucht nirgends auf, sondern dient der Beschreibung bzw Namen des Form.
Rechts haben wir weitere Felder die wir ren einziehen können wenn wir noch weitere Felder anlegen wollen.
Wir klicken hier unsere vorhandendes Feld an, gibts noch keins und wir ziehen ein Feld rein kommts auf selbe hinaus.
Nun habn wir auf der rechten Seite die Feldeigenschaften.
Das Label, das ist auch das was dann beim Artikel erscheint.
Enabled / Disabled, sprich soll das Feld aktiv sein.
Required, ist der Haken gesetzt muss das Feld ausgefüllt sein, sonst kann der Artikel nicht in den Warenkorb gepackt werden.
In der Feldbeschreibung, kann kann man auch nochmals ausfüllen was das Feld macht, ich habs aber ins Label mit reingepackt
Nun unter condition wenn man mehrere Felder hat, kann man sich weitere Felder erst anzeigen lassen, wenn die vorherigen schon befüllt sind. So kann man eine Art Assistent bauen, die Felder ploppen nach und nach je auswahl auf. oder Sogar andere Auswahlen.
Zum Beispiel bei CPU AMD oder intel.
Bei Intel würden im zweiten Drop Down menü dann die Intel bzw bei AMD die AMD CPUs gelistet werden
Zum Schluss kann über das Zahnrad bestimmt werden, für Welche Produkte oder Produkt Kategorien.
Dies ist ein zusatzartikel für jeweils eine bestimmte Produktkategorie.
Zum Schluss das ganze noch speichern.
Fertig:
Addon - Code Snippet
Beschreibung:
Einige Funktionen oder Änderungen lassen sich durch kleine Code Snipptes in der function.php realisieren.
Allerdings ist das manuelle bearbeiten meist umständlich.
Vorallem wenn ein Code Snippet Fehlerhaft ist, funktioniert unter Umständen das ganze Wordpress nicht mehr.
Hier ein Plugin mit dem man solche Snippets verwalten kann.
Download Link : https://de.wordpress.org/plugins/code-snippets/
Bedienung:
Nach der installtion hat man links im Menü Snipptes und alle Snippets.
Es gibt schon ein paar Demo Snipptes die aber deaktiviert sind.
Über Neu hinzufügen können wir ein neues Snippet einfügen
hier ein Snippet was prüft ob der Kunde den Artiekl in der vergangenheit schon mal gekauft hat.
Dieses wird im Produkt dargestellt
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>';
}
});
Titel Ausfüllen den Quelltext reinpacken.
Unten weiter kann noch eine Beschreibung angeben werden.
Dann auf Speichern und aktivieren klicken.
Nun sollte das Snippet beim Artikel genau das tun, was es soll:
Wenn man nicht eingeloggt ist bekommt man diese Meldung:
Wenn man eingeloggt ist, diese wenn gekauft
und wenn man es noch nicht besitzt
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.
Dort steht es nun in der Liste.
Addon - WooCommerce Product Dependencies
Beschreibung:
EIn Plugin das Abhängigkeiten zu anderen Produkten hat.
bedeuet ein Benutzer muss ein Produkt im Warenkorb oder in der Vergangenheit gekauft haben, damit er den Artikel in den Warenkorb packen kann.
https://wordpress.org/plugins/woocommerce-product-dependencies/
Allerdings hat die version 2.0.1 einen Bug bei gekauften Produkten.
habe Ihn mit einem Workaround gefixt. Siehe weiter unten bei BUG
Bedienung:
Nach der Installation gibt es nichts weiter einzustellen.
unter Produkt gibt es einen neuen Menüpunkt Dependencies
Dort kann man einstellen ob die Abhängigkeit von einem einzelnen Produkt sein soll, oder eine Kategorie.
Dann der Abhängigkeitstyp / Dependency type :
- Ownership: Obs schon gekauft sein muss
- Purchase : Ob im Warenkorb sein muss
- Either: Beides, muss im Warenkorb oder schon mal gekauft worden sein.
Eins von beiden muss zutreffen, also eine oder Bedingung
BUG:
Lösung:
Die Funktion
....
// Check ownership.
if ( in_array( $dependency_type, array( self::DEPENDENCY_TYPE_OWNERSHIP, self::DEPENDENCY_TYPE_EITHER ) ) ) {
if ( is_user_logged_in() ) {
$current_user = wp_get_current_user();
if ( 'category_ids' === $dependency_selection_type ) {
$tied_product_ids = $this->get_product_ids_in_categories( $tied_category_ids );
...
dies muss stehen belieben, die funktion ghet bis hier:
$result = $ownership_dependency_result || $purchase_dependency_result;
Ersetzen durch
// Check ownership (vereinfachte Prüfung).
if ( in_array( $dependency_type, array( self::DEPENDENCY_TYPE_OWNERSHIP, self::DEPENDENCY_TYPE_EITHER ) ) ) {
if ( is_user_logged_in() ) {
$current_user = wp_get_current_user();
// Hole ggf. Produkt-IDs aus Kategorie
if ( 'category_ids' === $dependency_selection_type ) {
$tied_product_ids = $this->get_product_ids_in_categories( $tied_category_ids );
} else {
$tied_product_ids = $tied_ids;
}
foreach ( $tied_product_ids as $tied_id ) {
if ( wc_customer_bought_product( '', $current_user->ID, $tied_id ) ) {
$ownership_dependency_result = true;
break;
}
}
// Kombinieren mit Kaufabhängigkeit falls nötig
if ( $ownership_dependency_result && self::DEPENDENCY_TYPE_EITHER === $dependency_type ) {
$purchase_dependency_result = true;
}
}
}
//hier endet die funktion und die datei geht normal weiter
Dann sieht das ganze so aus:
....
// Check ownership (vereinfachte Prüfung).
if ( in_array( $dependency_type, array( self::DEPENDENCY_TYPE_OWNERSHIP, self::DEPENDENCY_TYPE_EITHER ) ) ) {
if ( is_user_logged_in() ) {
$current_user = wp_get_current_user();
// Hole ggf. Produkt-IDs aus Kategorie
if ( 'category_ids' === $dependency_selection_type ) {
$tied_product_ids = $this->get_product_ids_in_categories( $tied_category_ids );
} else {
$tied_product_ids = $tied_ids;
}
foreach ( $tied_product_ids as $tied_id ) {
if ( wc_customer_bought_product( '', $current_user->ID, $tied_id ) ) {
$ownership_dependency_result = true;
break;
}
}
// Kombinieren mit Kaufabhängigkeit falls nötig
if ( $ownership_dependency_result && self::DEPENDENCY_TYPE_EITHER === $dependency_type ) {
$purchase_dependency_result = true;
}
}
}
//hier endet die funktion und die datei geht normal weiter
$result = $ownership_dependency_result || $purchase_dependency_result;
// Show notice.
if ( false === $result ) {
...
Hier einmal die woocommerce-product-dependencies.php zum download bzw
gleich die ganze Plugin Zip woocommerce-product-dependencies-2.0.1-original-ownership-logic-fix.zip
Addon - Checkout Field Editor (Checkout Manager)
Beschreibung:
Check Out Filed manager.
Damit können zusätzliche Felder zu den Kundendaten erfasst werden.
Download : https://wordpress.org/plugins/woo-checkout-field-editor-pro/
Einrichtung:
Im Plugin Manager auf Settings klicken.
Dann unter Block check out und Adresses, findet man alle Einstellungen / Felder für die Adressen.
Die Reihenfolge lässt sich auch ändern
Wer das Englische nicht mag kann diese ja in Deutsch umbenennen.
und schon steht der Firmenname mit drin.
Addon - Custom Order Numbers for WooCommerce
Beschreibung:
Order Nummern anpassen zurück setzten Plugin.
https://wordpress.org/plugins/custom-order-numbers-for-woocommerce/
Bedienung:
unter Einstellungen -> Custom Order Numbers for WooCommerce
order number Format
Hier kann man die Sequenz und Prefixe einstellen
Uns interessiert nur dies, denn wir wollen einfach Order Nummern fortlaufend
Möchte man vorhandene Order Nummern umbenennen
Runter scrollen bis Renumerate Order Tools
Auf renumerate klicken
Das Ergebnis, alle order Nummern, Nummeriert
Alles zurücksetzten:
Erstmal alle Bestellungen löschen und den Papierkorb auch leeren:
Nun in die Plugineinstellungen auf Settings gehen
Ganz nach unten Scrollen
reset Section Settings anklicken und speichern anklicken
Nun kann wieder von vorne begonnen werden mit Bestell Nr 1
Addon - WooCommerce E-Invoicing Customizer
Beschreibung:
Ein Plugin für Zugpferd,xrechung etc.
Allerings ist der Germanized besser, auch wenn er Jährlich Geld kostet.
Eine Super investition
Zugpferd Rechung und Rechnungen im Kundenkonto.
Kasse DSGVO Konform etc.
Siehe hier:
Addon - Germanized Pro für WooCommerce
Einrichtung:
nach der installtion landet man automatisch in den Einstellungen.
Erstmal die grundlegenden Sachen
Dann speichern.
Nun kann das Rechnungsdesign angepasst werden, dazu auf den Link klicken
Das Hauptmenü, an der linken Seite, können alle Bereiche definiert werden
in der Rechnungsfußzeile ist das einzige was ich anpassen würde. Da müssen die Sachen aus der Rechung rein, wie Steuernummer etc.
zum Beispiel so:
Dann sieht die Vorschau so aus:
Nun veröffentlichen.
Addon - WP Mail SMTP by WPForms – The Most Popular SMTP and Email Log Plugin
Beschreibung:
Ein SMTP-Server zum versenden von Email aus Wordpress heraus.
Einrichtung:
nach der Installation kommt der Setup Assitant
Nun den Emailsender wählen.
Es werden viele Anbieter ünterstützt
ich wähle hier anderer SMTP-Server aus
Nun die Daten eingeben
Speichern und fortfahren
Alles so lassen
Diesen schritt überspringen
Wir nutzen die Kostenlose Version, auch hier überspringen.
Wer natürlich einen Schlüssel hat , eingeben und auf verbinden klicken
Addon - Germanized Pro für WooCommerce
Beschreibung:
Plugin das den Shop Germany rechtskomform macht, mit E-Rechnung etc.
Für E Rechungen braucht man kostenpflichtig, Abo.
Aber lohnt sich ;-)
https://de.wordpress.org/plugins/woocommerce-germanized/
Einrichtung:
So lassen und weiter
Alles so lassen außer man ist Kleinunternehmer
Wer DHL integration braucht ist auch hier mit dem kostenlosen plugin bedient,
ich brauche allerdings kein versand, habe nur digitale Produkte.
Aber trotzdem cool DHL
Nun Auf Tutorial starten klicken
Rechnungsnummern und alle Rechnungen zurück setzten:
(dadurch gehen alle vorhandenen bzw. ausgewählten Rechnungen verloren)
Dazu müssen wir Tabellen und Verzeichnis leeren.
Um die Tabellen zu leeren, nehmen wir das WP Database plugin : Addon - WP-DBManager
Nun gehen wir dort auf Emtpy Tables
Dort wählen wir folgende Tabellen mit Empty aus
{prefix}_storeabill_documents{prefix}_storeabill_documentmeta{prefix}_storeabill_document_items{prefix}_storeabill_document_itemmeta{prefix}_storeabill_document_notices{prefix}_storeabill_document_noticemeta{prefix}_storeabill_document_attachments{prefix}_storeabill_document_attachmentmeta
Nun runter scrollen und auf empty drop klicken
Wurden geleert
Nun müssen wir noch die PDF wegräumen
wir gehen in den storebill ordner rein
root@shop:~/wordpress/data/wordpress/wp-content/uploads/storeabill-2b9e42fc8f# ls
2025 fonts index.php tmp
root@shop:~/wordpress/data/wordpress/wp-content/uploads/storeabill-2b9e42fc8f#
Hier sehen wir die Jahre, in diesem Fall 2025, sollten bei euch noch mehrere Jahre sein. Alle Jahre löschen
Die Ordner tmp fonts und die index.php Datei NICHT löschen.
rm -r 2025
Nun den Nummernkreis zurücksetzten.
Nun Auf Einstellungen gehen
Dann bei Rechnungen und Lieferscheine auf den Stift klicken
Hier steht in der Vorschau was die nächste Nummer wäre. Was aber falsch ist da wir ja alles weggeschmissen haben
Nun den Haken bei letzte Nummer anpassen rein und den Wert auf 0 ändern
Nun steht in der Vorschau wieder die 1 als nächste Fortlaufende Nummer.
Unser Prefix ist hier die 101. So kommt dann 1011 zu Stande.
Addon - WP Control
Beschreibung:
WP Crontrol ermöglicht es Ihnen, die geplanten Cron-Ereignisse auf Ihrer WordPress-Website oder in Ihrem WooCommerce-Shop zu verwalten. Über die Administrationsseiten können Sie:
-
Alle geplanten Cron-Ereignisse samt ihrer Parameter, Zeitpläne, Callback-Funktionen und dem nächsten Ausführungszeitpunkt anzeigen.
-
Cron-Ereignisse bearbeiten, löschen, pausieren, fortsetzen und sofort ausführen.
-
Neue Cron-Ereignisse hinzufügen.
-
Cron-Ereignisse per Massenverarbeitung löschen.
-
Individuelle Cron-Zeitpläne hinzufügen und entfernen.
-
Cron-Ereignislisten als CSV-Datei exportieren und herunterladen.
WP Crontrol berücksichtigt Zeitzonen, warnt Sie vor Ereignissen, die keine Aktionen enthalten oder ihren Zeitplan verfehlt haben, und zeigt Ihnen eine hilfreiche Warnmeldung an, falls Probleme mit Ihrem Cron-System festgestellt werden.
Nutzung
-
Gehen Sie im Menü zu Werkzeuge → Cron-Ereignisse, um Cron-Ereignisse zu verwalten.
-
Gehen Sie im Menü zu Einstellungen → Cron-Zeitpläne, um Cron-Zeitpläne zu verwalten.
Plugin Webseite: https://de.wordpress.org/plugins/wp-crontrol/
Bedienung :
Unter Ereignisse kann der Status eingesehen werden oder Zeitpläne können eingesehen werden
Ereignisse :
Hier kann man sehr schön sehen, das irgendwas mit dem cron system nicht stimmt.
Aber sonst, wenn alles läuft sieht man hier die Ereignisse.
Wir klicken bei Weitere information bei cURL Fehler drauf.
Fehlerdiagnose :
Unser Problem ist :
This means there is a network connectivity problem preventing your server from performing "loopback" requests to itself.
3000 Milliskeunden sind 3 Sekunden.
Wenn unsere Seite nicht schnell genug läuft gibts ein Timeout.
In der php.ini den Timeout einstellen auf 30 Sekunden
default_socket_timeout = 30
Sollte das auch nicht gehen, leiten wir die URL um wegen dem Caddy namen. Dann funktioniert die Auflösung nicht richtig.
Das machen wir mit dem Plugin Code Snippte
Snippt,
http://wordpress is der name in der docker-compose Datei.
Sollte dein DIenst anders heißen hier abändern genauso wie die externe url
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;
});
Addon - WP-DBManager
Beschreibung:
So ne Art abgespecktes phpmyadmin für Wordpress.
URL : https://de.wordpress.org/plugins/wp-dbmanager/
Bedienung:
Nach der Installation gibt es links im Menü einen neuen Punkt der Datenbank.
Nun können wir entscheiden was wir möchten
Der rest ist Selbserklärend
Addon - Redis Cache
Beschreibung:
Ein Plugin das benötigt wird um Redis zu verwenden
Link : https://wordpress.org/plugins/redis-cache/
Einrichtung:
bevor das Plugin aktiviert wird. Muss noch die config.php angepasst werden.
Hier wird die env Variable vom Wordpress ausgelesen die wir im docker compose File gesetzt haben
define( 'WP_REDIS_HOST', getenv('WP_REDIS_HOST') ?: 'redis' );
wer kein docker nutzt einfach nur den server definieren sollte er local laufen dann einfach localhost oder 127.0.0.1 verwenden, ansonsten den hostnamen
define( 'WP_REDIS_HOST', '<hostname oder ip von redisserver' );
da wir ein docker haben können wir übers Dateisystem dies ändern, alle anderen varianten via ftp
nano /root/wordpress/data/wordpress/wp-config.php
Inhalt, nach den Datenbank Einträgen einfügen:
.../** Database hostname */
define( 'DB_HOST', getenv_docker('WORDPRESS_DB_HOST', 'mysql') );
/** Database charset to use in creating database tables. */
define( 'DB_CHARSET', getenv_docker('WORDPRESS_DB_CHARSET', 'utf8') );
/** The database collate type. Don't change this if in doubt. */
define( 'DB_COLLATE', getenv_docker('WORDPRESS_DB_COLLATE', '') );
/** Hier die define hin für redis*/
define( 'WP_REDIS_HOST', getenv('WP_REDIS_HOST') ?: 'redis' );
Addon installieren aktivieren
Nach der Aktivierung kommt der Assistent.
Hier den Cache einschalten
Wenn der Redis Server erreichbar ist alles funktioniert, sieht das ganze so aus