Grundpreis in WooCommerce anzeigen

Um den Grundpreis für Affiliate-Produkte anzeigen zu können, muss folgender Hook als Snippet hinterlegt werden. Anschließend wird in WooCommerce der Preis vom Affiliate-Produkt direkt angezeigt und auch der Grundpreis (falls vorhanden).

function cw_change_product_price_display( $price ) {
		$woo_id = get_the_ID();
		
		$productid = ATKPTools::get_post_setting( $woo_id, ATKP_PLUGIN_PREFIX . '_sourceproductid' );

		if ( $productid != '' && $productid != 0 ) {
			$product_list = atkp_product_collection::load( $productid );
			
			if($product_list != null && $product_list->get_main_product() != null)  {
				$formatter = new atkp_formatter( null, null );
				$product =$product_list->get_main_product();
				
				return $formatter->get_pricetext($product, __( '%s', ATKP_PLUGIN_PREFIX ), __( 'Price not available', ATKP_PLUGIN_PREFIX )). ' '. $formatter->get_basepricetext($product);
				
			}
		}
	
        return $price;
    }
    add_filter( 'woocommerce_get_price_html', 'cw_change_product_price_display' );
    add_filter( 'woocommerce_cart_item_price', 'cw_change_product_price_display' );

Grundsätzlich können alle Tabellen von affiliate-toolkit welche extra angelegt werden, jederzeit neu von der API befüllt werden.

Wenn man den Schritt mit dem befüllen überspringen möchte, kann man diese Tabellen sichern:

  • atkp_products
  • atkp_lists
  • atkp_geo_ip_country (falls aktiv)
  • atkp_pricehistory (falls aktiv)

Die anderen Tabellen werden primär für Produkt-Updates genutzt und sind daher nicht relevant in einer Komplettsicherung.

Das kann man mit diesem Hook erreichen:

function atkp_product_modify_producturl_callback( $product, $product_id, $shop_id ) {	

	if($product->producturl != '')
		$product->producturl = 'https://domain.at/redir?url='.urlencode($product->producturl);
	
	if($product->addtocarturl != '')
		$product->addtocarturl = 'https://domain.at/redir?url='.urlencode($product->addtocarturl);
	
	if($product->customerreviewurl != '')
		$product->customerreviewurl = 'https://domain.at/redir?url='.urlencode($product->customerreviewurl);
	
	return $product;
}
add_filter( 'atkp_product_modify_product', 'atkp_product_modify_producturl_callback', 10,3);

Beachten Sie bitte, das der Link erst beim Update des Caches gesetzt wird.

Mit diesem Hook wird die Liste gefiltert wenn Titel, Beschreibung oder Eigenschaften leer ist.

function atkp_list_empty_productlist_callback( $products, $list_id ) {	
	
	$products_filtered = array();

	foreach($products as $product_arr) {
		if($product_arr['type'] != 'product') {
			$products_filtered[] = $product_arr;
			continue;
		}

		$is_empty = false;
		if($product_arr['value']->title == '' || $product_arr['value']->description == '' || $product_arr['value']->features == '') {
			$is_empty = true;
		}

		if(!$is_empty)
			$products_filtered[] = $product_arr;
	}
	return $products_filtered;
}


add_filter( 'atkp_list_modify_productlist', 'atkp_list_empty_productlist_callback', 10,2);

Fügen Sie dieses Snippet einfach in Ihre functions.php oder in ein Snippets-Plugin ein.

Damit man Produkte mittels UND in einer Liste filtern kann, kann man diesen Filter nutzen. Es ergänzt die Liste um ein weiteres Feld "AND filter".

Ist dieses Feld befüllt, wird die Liste nach dem Laden von der API nochmals gefiltert.

function atkp_list_modify_productlist_callback( $products, $list_id ) {	
	$andfilter = ATKPTools::get_post_setting( $list_id, ATKP_LIST_POSTTYPE . '_andfilter' );
	
	if($andfilter == '')
		return $products;
	
	$andkeywords = explode(',', $andfilter);
	
	$products_filtered = array();

	foreach($products as $product_arr) {
		if($product_arr['type'] != 'product') {
			$products_filtered[] = $product_arr;
			continue;
		}

		$all_found = array();
		foreach($andkeywords as $andkeyword) {
			$andkeyword = trim($andkeyword);
			if(ATKPTools::str_contains($product_arr['value']->title, $andkeyword, false) ) {
				$all_found[$andkeyword] = $andkeyword;
			}
			if(ATKPTools::str_contains($product_arr['value']->description, $andkeyword, false)) {
				$all_found[$andkeyword] = $andkeyword;
			}
			if(ATKPTools::str_contains($product_arr['value']->features, $andkeyword, false)) {
				$all_found[$andkeyword] = $andkeyword;
			}
		}

		if(count($all_found) >= count($andkeywords))
			$products_filtered[] = $product_arr;
	}
	return $products_filtered;
}


add_filter( 'atkp_list_modify_productlist', 'atkp_list_modify_productlist_callback', 10,2);




function atkp_list_after_fields_callback($list_id) {
	$list_id = get_the_ID();
	?>
<tr>
            <th scope="row">
                <label for="">
					<?php _e( 'AND filter', ATKP_PLUGIN_PREFIX ) ?>:
                </label>
            </th>
            <td>
                <input type="text" style="width:100%" id="<?php echo ATKP_LIST_POSTTYPE . '_andfilter' ?>"
                       name="<?php echo ATKP_LIST_POSTTYPE . '_andfilter' ?>"
                       value="<?php echo ATKPTools::get_post_setting($list_id, ATKP_LIST_POSTTYPE . '_andfilter', true ); ?>">

            </td>
        </tr>
	<?php
}

add_action('atkp_list_after_fields', 'atkp_list_after_fields_callback', 10, 1);


function atkp_list_save_fields_callback($list_id) {
	$minpercentage  = ATKPTools::get_post_parameter( ATKP_LIST_POSTTYPE . '_andfilter', 'string' );
	
	ATKPTools::set_post_setting( $list_id, ATKP_LIST_POSTTYPE . '_andfilter', $minpercentage );
}

add_action('atkp_list_save_fields', 'atkp_list_save_fields_callback', 10, 1);

Fügen Sie dieses Snippet einfach in Ihre functions.php oder in ein Snippets-Plugin ein.

Um das zu realisieren, müssen wir auf zwei Hooks von affiliate-toolkit zugreifen.

Mit diesem code wird die Produktkategorie der Liste zugewiesen. Eventuell muss "productcategory" durch den eigenen namen ersetzt werden.

function atkp_list_register_post_type_list($args) {

	$args['taxonomies'] = array('productcategory');

	return $args;
}

add_filter('atkp_list_register_post_type', 'atkp_list_register_post_type_list', 10, 1);

Nun kann man der Liste die Kategorien zuweisen.

Jetzt müssen wir nur noch die Produktkategorien von der Liste zum Produkt kopieren. Das schaffen wir mit dem folgenden Hook:

function atkp_product_autoimport_list($product_list, $list_id) {
	
	foreach($product_list as $product_item) {
		$type = $product_item['type'];
		
		if($type == 'productid') {
			$product_id = $product_item['value'];		
			
			// get an array with the term_ids only
           $term_ids = array();
           $term_objs = get_the_terms( $list_id, 'productcategory' );

           // get_the_terms returns an array of WP_Term objects
           foreach ($term_objs as $term_obj)
               $term_ids[] = $term_obj->term_id; // get the id from the WP_Term object

			if ( count($term_ids) > 0 ){
				wp_set_post_terms($product_id, $term_ids, 'productcategory', false);
			}	
		}
	}	
}

add_action('atkp_product_autoimport', 'atkp_product_autoimport_list', 10, 2);

Auch hier muss eventuell der "productcategory"-Name durch den eigenen ersetzt werden.

Leider müssen die Produkte von AWIN und vom CSV-Feed in eine temporäre Tabelle importiert werden. Je nach größe des Produktfeeds werden die Tabellen auch entsprechend groß.

Das kann nur verhindert werden, wenn man an der Quelle das Produkt filtert. Z.b. Nach Kategorien oder anderen Schlüsselbegriffen mittels "Create a feed".

Ist es normal, mit so großen Dateien zu arbeiten?

Dies ist abhängig vom jeweiligen Shop. Wenn diese großen Shops alle Produkte einem Feed exportieren, kann das durchaus "normal" werden.

Sind 2GB Datenbanken zu klein?

Für normale Webseiten sind diese Datenbankgrößen völlig ausreichend. Wenn man allerdings viele Feeds importiert, ist es durchaus notwenidg eine größere Datenbank zu haben.

Man kann folgendes überprüfen

Loggen Sie sich per PhpMyAdmin in Ihre Datenbank ein.

Überprüfen Sie ob es eventuell alte Tabellen gibt welche {PREFIX}_atkp_csv_{POSTID} oder {PREFIX}_atkp_awin_{POSTID} heißen. Falls es diesen Shop nicht mehr gibt, kann die Tabelle gelöscht werden.

Falls Sie von der Version 2 ein Upgrade gemacht haben, könenn Sie auch prüfen ob diese Tabellen existieren und anschließend löschen:

  • {PREFIX}_atkp_additionaloffers
  • {PREFIX}_atkp_productoffers
  • {PREFIX}_atkp_productdata

Falls die Datenbank weiterhin zu groß ist, können Sie nur noch die Partnerprogramme reduzieren.

Ja, natürlich geht das. Da kannst du unter Anzeigeeinstellungen "Show plugin credits" den Haken entfernen.

Wenn Sie einige benutzerdefinierte Vorlagen erstellt haben und die Vorlage "Mehr Angebote" verwenden, erhalten Sie eine Fehlermeldung. Sie können dies beheben, indem Sie die folgenden Zeilen ersetzen.

Suchen Sie nach diesen Zeilen:

@if(atkp_options::$loader->show_ count($formatter->get_offers($product, false)) > 0)
    @include($parameters->offerstemplate,['formatter' => $formatter, 'translator' => $translator, 'product' => $product])
@endif

ersetzen Sie sie durch diese 3 Zeilen:

@if($parameters->get_show_moreoffers() && count($formatter->get_offers($product, false)) > 0)
    @include($parameters->get_moreoffers_template(),['formatter' => $formatter, 'translator' => $translator, 'product' => $product, 'parameters' =>$parameters])
@endif

Bei den Shops kannst Du das normal machen. Ich lege da immer einen Dummy Shop an, wo ich das manuelle Produkt dann zuordne.

(FB-Gruppe / Johannes B.)

linkedin facebook pinterest youtube rss twitter instagram facebook-blank rss-blank linkedin-blank pinterest youtube twitter instagram