Direkt zum Hauptinhalt

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

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 zum download bzw
gleich die ganze Plugin Zip woocommerce-product-dependencies-2.0.1-original-ownership-logic-fix.zip