0

Ich entwickle gerade eine Website, die WooCommerce und verschiedene Erweiterungen (die alle zum Zeitpunkt des Schreibens aktuell sind) verwendet, um eine Reihe von Beiträgen anzuzeigen, die zu einem benutzerdefinierten Beitrag gehören Art.Probleme beim programmgesteuerten Erstellen von Variablenabos in WooCommerce

Diese Beiträge werden von Website-Benutzern am vorderen Ende der Website mit einem maßgeschneiderten ACF-Formular erstellt. Das Front-End-Formular erstellt einen neuen Post im Post-Typ "shwimmer-pools" neben zwei neuen Produkten - eines für die Abonnements und eines für Buchungen.

Die Erstellung dieser neuen Posts erfolgt in unserer maßgeschneiderten Klasse ShwimmerFormHandler. Diese Klasse wird ausgelöst, wenn das Poolerstellungsformular übergeben wird. Sie können die Klasse an diesem Punkt anzeigen: https://gist.github.com/mangopearuk/c10c52498547016c6aa23c6cca26fb43

Das Problem, mit dem wir konfrontiert sind, ist mit dem Abonnement-Produkt. Das Produkt muss ein variables Abo-Produkt sein, da Pool-Ersteller 6 verschiedene Preisbereiche festlegen können - Erwachsene, Kinder, Familienmitglieder & Monats- oder Jahresabonnements.

Derzeit erstellen wir erfolgreich das neue Abonnementprodukt mit wp_insert_post() [Zeile 285], und wir erstellen auch jede der Varianten mit wp_insert_post() [aus Zeile 478]. Diese werden alle erfolgreich registriert und arbeiten irgendwie.

Das Problem, mit dem wir konfrontiert sind, ist, wenn Sie das Frontend-Abo betrachten, ist der Preis nicht korrekt und wenn Sie eine Variation auswählen, erscheint eine Fehlermeldung: "Entschuldigung, dieses Produkt ist nicht verfügbar. Bitte wählen Sie eine andere Kombination. "

Das Abonnementprodukt funktioniert wie erwartet nach dem Drücken von "Update" in admin. Irgendwelche Ideen, wie Sie dieses Problem beheben können?

Danke, Andi

+0

Ja, so wird die Subskriptions-ID in der Klasse erstellt. –

Antwort

2

Sie müssen wahrscheinlich die Variable Produkt Sync auszulösen.

$subscription_id = wp_insert_post($args); 
$product = wc_get_product($subscription_id); 
$product->variable_product_sync(); 

Auch, wie Sie entdeckt haben (und hier der Vollständigkeit halber hinzugefügt) die Sync-Funktion arbeitet aus der _price Meta. _regular_price und _sale_price werden auch verglichen. Abonnements setzt seine _subscription_price als _regular_price und dann die _price ist entweder die _regular_price oder die _sale_price je nachdem, ob der Artikel im Angebot ist. Wenn Sie also ein Abonnement programmatisch erstellen, müssen Sie sicherstellen, dass Sie die Werte _price und _regular_price meta festlegen.

+0

Das hat leider nicht funktioniert. Ich habe auch versucht: '$ product-> sync ($ subscription_id);' - keine funktioniert. –

+0

Sorry, ich habe ein ähnliches Problem vorher gesehen und dachte, dass es das war. Haben alle Ihre Variationen Preise? – helgatheviking

+0

Ja, alle Variationsdaten werden in den richtigen Feldern gespeichert - sie werden nur im Frontend angezeigt, bis Sie den Post manuell bearbeiten und aktualisieren. –

1

Danke für die Hilfe allen. Stellt sich heraus, es ist eigentlich ganz einfach zu reparieren ...

Das Abonnement-Plugin zeigt nicht die _price und _regular_price Meta-Felder, aber die sync() Funktion erfordert sie. Sobald ich diese zwei zusätzlichen Felder zu meiner Klasse hinzugefügt habe, funktionierte die sync() Funktion.