# 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/](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 <span class="BxUVEf ILfuVd" lang="de"><span class="hgKElc">Bedingung</span></span>

[![grafik.png](https://wiki.hacker-net.de/uploads/images/gallery/2025-03/scaled-1680-/T6g5TL6snrjcbGvG-grafik.png)](https://wiki.hacker-net.de/uploads/images/gallery/2025-03/T6g5TL6snrjcbGvG-grafik.png)

### 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](https://wiki.hacker-net.de/attachments/80) zum download bzw   
gleich die ganze Plugin Zip [woocommerce-product-dependencies-2.0.1-original-ownership-logic-fix.zip](https://wiki.hacker-net.de/attachments/81)