# Technisch

# Cronjobs

Een cronjob of crontab is een commando dat een programma of script op een ingesteld tijdstip uitvoert. Deze cronjobs zijn nodig om de producten binnen uw winkel te synchroniseren. We gaan drie cronjobs aanmaken voor het syncen van producten.

# SSH

We hebben ssh toegang nodig tot onze server voor het instellen van een crontab.

ssh gebruiker@domein

Als we ingelogd zijn dan kunnen we onze bestaande crontab opvragen qua configuratie.

crontab -l

En we krijgen het volgende bericht als er geen jobs zijn.

no crontab for <naam gebruiker>

We gaan gebruik maken van het curl commando in onze cronjob om de opdracht uit te voeren.
Dus we moeten weten waar curl zich bevind op onze server.

which curl

En we krijgen het pad terug waar curl is geinstalleerd.

/usr/bin/curl

We kunnen nu onze crontab aanmaken met het volgende commando:

EDITOR=nano crontab -e

Er wordt nu een bestand geopend in uw favoriete editor. In dit geval is dat nano. We hebben voor deze cronjobs de url van uw domein nodig. Als voorbeeld gebruiken we hier https://wiseconn.nl Uiteraard moet je dat vervangen met de domein van je eigen wordpress webshop.

We gaan er bij het instellen vanuit dat de server tijd is ingesteld op "Central European Time" ook wel "UTC + 1" genoemd. Onderstaande cronjobs zijn enkel bedoelt als voorbeeld. Je kunt natuurlijk zelf je eigen tijden instellen. Voeg de volgende tekst toe aan het geopende bestand om de cronjobs te installeren.

# SYNC COMPLIES PRODUCT
# Times(UTC+1): 0:00, 8:00, 9:00, 10:00, 12:00, 16:00
0 23,7,8,9,11,15 * * * usr/bin/curl https://wiseconn.nl/sync-complies-product

# SYNC COMPLIES STOCK
# Times(UTC+1): 1:10, 3:10, 5:10..
10 */2 * * * /usr/bin/curl https://wiseconn.nl/sync-complies-stock

# SYNC COMPLIES PRICE
# Times(UTC+1): 1:20, 3:20, 5:20...
20 */2 * * * /usr/bin/curl https://wiseconn.nl/sync-complies-price

# SYNC COMPLIES PRODUCT FILTER
# Times(UTC+1): 8:30, 9:30, 10:30, 12:30, 16:30, 17:30, 19:30, 23:30
30 7,8,9,11,15,16,18,22 * * * /usr/bin/curl https://wiseconn.nl/sync-complies-filter

Om nu alles op te slaan druk je op de Ctrl toets en de letter O tegelijk. Druk op Enter om het bestand te bewaren.

We kunnen nu de crontab opvragen om te checken of alles klopt.

crontab -l

Als het goed is krijg je zelfde cronjobs te zien als hierboven.

# WordPress

Om de cronjobs werkend te krijgen binnen uw WordPress installatie is de volgende instelling van belang. Klik bij Instellingen op Permalinks



Zorg er voor dat de optie Berichtnaam is geselecteerd.


# cPanel

Het kan zijn dat je geen toegang heeft tot uw server met SSH.
De cronjob moet dan van het cPanel account geinstalleerd worden.
Voor meer informatie:
https://support.hoasted.com/article/102-hoe-configureer-ik-een-cronjob-in-cpanel (opens new window)

# Plesk

Voor Plesk kunt je de volgende URL raadplegen:
https://support.plesk.com/hc/en-us/articles/115003121073-How-to-add-a-scheduled-task-in-Plesk-UI-using-crontab-syntax- (opens new window)

# Eigen oplossingen

Hier staan enkele voorbeeld oplossingen die door gebruikers van de plugin aangevraagd worden. Je moet hiervoor verstand van programmeren hebben. Onderstaande oplossingen zijn meer bedoelt als voorzet voor webdevelopers.

# Merken categorie

Onderstaande oplossing maakt het mogelijk om een eigen merken categorie te maken. Je moet zelf een merken categorie aanmaken met daaronder subcategorieen die de naam van een merk hebben.

Voorbeeld categorie structuur:

Merk\Acer
Merk\Asus
Merk\Hewlett Packard
Merk\Microsoft
Merk\Samsung

De oplossing kijkt naar de waarde van het Merk attribuut van een product. Komt de waarde overeen met de merken subcategorieën dan word dit product daarin geplaatst.

In onderstaande PHP code moet je zelf het category ID nummer van de "Merk" categorie zetten. Het ID nummer van de categorie kun je vinden door de categorie aan te klikken in de Wordpress admin panel. Het Internet adres van deze pagina ziet er dan als volgt uit:

wp-admin/term.php?taxonomy=product_cat&tag_ID=2808

Het nummer wat je ziet is het ID nummer van de categorie.

/*
** Complies brand category
**
** Calls 'compliesBrandCategory()' in
** the event of a Woocommerce product set.
*/
add_action('woocommerce_new_product', 'compliesBrandCategory', 10, 1);
add_action('woocommerce_update_product', 'compliesBrandCategory', 10, 1);
function
compliesBrandCategory(
	$productId
){
  $oProduct = wc_get_product($productId);
  if( !$oProduct ){ return; }

  $aCat = $oProduct->get_category_ids();
  $nCat = count($aCat);
  $sBrandName = trim((string)$oProduct->get_attribute('pa_cpl_merk'));

  /* Automatically fills subcategories for the given brand category
  ** by subcategory name. WooCommerce category structure is like:
  **  "Brand/Acer"
  **  "Brand/Asus"
  **  "Brand/Hewlett Packard"
  **  "Brand/Microsoft"
  **  "Brand/Samsung" */
  $args = [
    'parent' => 2808, /* << Categorie ID */
    'taxonomy' => 'product_cat',
    'hide_empty' => false,
  ];
  $terms = get_terms($args);
  if( $terms && is_array($terms) ){
    foreach( $terms as $v ){
      if( 0===strcasecmp($v->name, $sBrandName) ){
        $aCat[] = $v->term_id;
        break;
      }
    }
  }

  /* The the number of assigned categories for this
  ** product has changed then save the product. */
  $aCat = array_unique($aCat);
  if( $nCat!=count($aCat) ){
    $oProduct->set_category_ids($aCat);
    $oProduct->save();
  }

} /* end function compliesBrandCategory() */

# Changelog

1.9.0

  • Product cron job ("sync-complies-product") aangepast, zodat deze enkel de stamgegevens aanpast. Dus een pull en sync van enkel de basis gegevens. Product afbeeldingen worden niet meer gedaan ivm tijdslimiet van 30 seconden.
  • Producten die niet meer in de feed staan krijgen de status "notinfeed" en worden in WooCommerce op 0 voorraad gezet.
  • Op de "Complies Sync -> Products" pagina is status filter aangepast. Met de filters "Not in product feed", "In WooCommerce" en "Not in WooCommerce".
  • Complies filters worden toegevoegd als "cpl_[filternaam]" (onder Products->Attributes) en dubbele filters worden samengevoegd in 1 filter.
  • Als je op de sync knop klikt dan worden nu enkel aangepaste producten gesyncroniseerd. Dit process is na de initiele synchronisatie nu veel sneller afgerond.
  • Categorie pagina "pull & sync" knop aangepast naar 2 knoppen. Dit voorkomt verwarring.
  • Plugin documentatie bijgewerkt.

1.9.1 t/m 1.9.6

  • Producten hebben nu de eigenschappen/filters "Merk", "Krant artikel" en "Dagaanbieding".
  • "Not in feed" producten die niet in WooCommerse staan worden automatisch uit de plugin product lijst verwijderd.
  • Op de plugin producten pagina kun je nu filteren op Merk. Als je in WooCommerce enkel bepaalde merken wil hebben dan kan dit nu eenvoudig.
  • Je ziet nu geen "notinfeed" producten als je in de plugin producten pagina filtert op "Not in WooCommerce" filtert.

1.9.7

  • Als klant kan je nu eigen/extra WooCommerce categorieën aanmaken. Het gaat hier om categorieën die niet voorkomen op de categorieën pagina van de plugin. Deze categorieën zijn dus niet gekoppeld. Vorige versies van de plugin verwijderden de Complies producten uit deze categorieën. Vanaf deze versie gebeurd dit niet meer. Onder het kopje "Eigen oplossingen" hebben we een merken categorie voorbeeld oplossing gemaakt die van deze nieuwe mogelijkheid gebruik maakt.
  • Handleiding hoofdstuk "Gebruik" aangepast. O.a. Producten Pull en Sync zijn twee knoppen geworden.

2.0.0

  • Product filters worden beter en sneller geüpdatet. De filters "Dagaanbieding", "Op voorraad ?" en "In krant?" werken nu beter en zijn eerder actueel. Je kunt nu een extra filters cronjob instellen om de filters actueel te houden zie "Cronjobs".
  • Producten die in de dagaanbiedingen worden automatisch toegevoegd aan WooCommerce. Uiteraard moet je de categorie waarin deze producten zitten wel gekoppeld hebben. (zie "Categorieën"). Meestal gaat het om nieuwe producten. Deze hebben dan nog geen afbeeldingen. Afbeeldingen toevoegen doe je door op de "Sync" knop klikken op de Products pagina.
  • Ondersteuning voor "High-performance order storage" is ingebouwd. Orders kun je nu zowel op de oude als nieuwe manier van WooCommerce order opslag exporteren naar Complies.
  • De "Complies Sync -> Products" pagina heeft een nieuwe status filter namelijk "Not in WooCommerce (no mapping)". Als je hier op filtert dan zie je producten die je niet gekoppeld hebt op de Categories pagina. Kort gezegd, als je geen Domotica producten wil verkopen, en daarom deze categorie niet gekoppeld hebt. Dan zie je nu alle Domotica producten van Complies.
  • Afbeeldingen toevoegen aan producten gebeurd nu op een betrouwbaardere manier. Dit zou problemen met producten zonder afbeelding moeten verminderen.
  • De Cronjobs in deze handleiding duidelijker omgeschreven en tijden verder uitgewerkt.

2.0.1

  • Sommige producten hebben geen filters. Deze hebben alleen de extra filters ("Merk", "Dagaanbieding?", etc). Enkel voor deze producten werden de extra filters niet geupdatet. Deze producten verschenen bijvoorbeeld niet in de Dagaanbeiding. Dat is in deze versie verholpen.

2.0.2

  • Tijdens een nieuwe installatie van de plugin was een licentie code verplicht. Dit is niet meer nodig. Bestaande installaties hebben hier niet mee te maken.