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
