# Technisch
# Cronjobs
✅ Notitie: Beschikbaar sinds plugin versie 2.0.11
Om ervoor te zorgen dat de product informatie op de webshop actueel blijft is het nodig om
een "Cronjob" in te stellen. Deze term staat voor een taak die
periodiek word uitgevoerd. Meestal kun je cronjobs eenvoudig instellen via het hosting beheerpaneel.
Meer informatie over Cronjobs vind je hier.
Om ervoor te zorgen dat de cronjobs kunnen worden ingesteld moet de hoofdmap
van de hosting worden achterhaalt. Je kunt het volgende doen:
- In het Wordpress admin paneel klik op "WooCommerce" en dan "Status".
In het tabje "Systeem status" zie je staan "Log directory writable".
Daar achter staat bijvoorbeeld: /data/web/wordpress/wp-content/uploads/wc-logs/
De hoofdmap is dan: /data/web/wordpress - Je kunt het hostingbedrijf vragen.
Meestal ziet de hoofdmap er zo uit: "/home/gebruikersnaam/public_html/".
In ons geval is de hoofdmap: /data/web/wordpress
Een cronjob moet een taak of commando hebben, om uit te voeren.
In ons geval is de taak, het PHP script: wp-content/plugins/complies-api/complies-cli-cron.php
Als ja daarvoor de hoofdmap plakt dan kunnen je deze commando's maken:
/data/web/wordpress/wp-content/plugins/complies-api/complies-cli-cron.php product
/data/web/wordpress/wp-content/plugins/complies-api/complies-cli-cron.php product_pictures
/data/web/wordpress/wp-content/plugins/complies-api/complies-cli-cron.php stock
/data/web/wordpress/wp-content/plugins/complies-api/complies-cli-cron.php price
/data/web/wordpress/wp-content/plugins/complies-api/complies-cli-cron.php filter
Hieronder een voorbeeld van de volledige cronjobs. Uiteraard kunt u zelf de tijden waarop de commando's werken bepalen.
# Product
0 23,5,8,9,11,16 * * * /usr/bin/php /data/web/wordpress/wp-content/plugins/complies-api/complies-cli-cron.php product
# Product afbeeldingen
0 0,12 * * * /usr/bin/php /data/web/wordpress/wp-content/plugins/complies-api/complies-cli-cron.php product_pictures
# Filters
30 7,8,9,11,15,16,18,22 * * * /usr/bin/php /data/web/wordpress/wp-content/plugins/complies-api/complies-cli-cron.php filter
# Voorraad
10 * * * * /usr/bin/php /data/web/wordpress/wp-content/plugins/complies-api/complies-cli-cron.php stock
# Prijs
20 */2 * * * /usr/bin/php /data/web/wordpress/wp-content/plugins/complies-api/complies-cli-cron.php price
We gaan er bij het instellen vanuit dat de servertijd is ingesteld op de "UTC" tijd. Dat betekend dat bovenstaande tijden tijdens de Nederlandse wintertijd +1 uur zijn en in de zomertijd +2 uur zijn.
Concreet betekend dit dat bijvoorbeeld de product informatie tijdens de wintertijd om 6:00 uur uitvoerd word en in de zomertijd om 7:00 uur.
Tijdens de wintertijd:
Product : 0:00, 6:00, 9:00, 10:00, 12:00 en 17:00 uur
Product afb : 1:00 en 13:00 uur
Filters : 8:30, 9:30, 10:30, 12:30, 16:30, 17:30, 19:30 en 23:30 uur
Voorraad : 0:10, 1:10, 2:10, 3:10 uur, etc
Prijzen : 1:20, 3:20, 5:20 uur, etc
Tijdens de zomertijd:
Product : 1:00, 7:00, 10:00, 11:00, 13:00 en 18:00 uur
Product afb : 2:00 en 14:00 uur
Filters : 9:30, 10:30, 11:30, 13:30, 17:30, 18:30, 20:30 en 0:30 uur
Voorraad : 0:10, 1:10, 2:10, 3:10 uur, etc
Prijzen : 1:20, 3:20, 5:20 uur, etc
Het is altijd verstand om een cronjob te testen. Dit kunt u als volgt doen. Wij gaan er vanuit dat je console toegang hebt. Niet iedere hosting provider biedt je deze mogelijkheid. Als je ingelogd bent en in de hoofdmap (root directory) van Wordpress dan zie je het volgende:
app@wp_complies_plugin ~/public>
app@wp_complies_plugin ~/public> pwd
/data/web/public
app@wp_complies_plugin ~/public> /usr/bin/php /data/web/wordpress/wp-content/plugins/complies-api/complies-cli-cron.php product
09:20:17 : Finished product synchronize
app@wp_complies_plugin ~/public>
Er verschijnt geen foutmelding dus deze cronjob werkt. Nu kun je er vanuit gaan dat de overige cronjobs ook werken.
# Cronjobs (oud)
⚠️ Waarschuwing: Wij raden niet aan om deze Cronjobs te gebruiken. Deze pagina is er alleen nog voor klanten die een plugin versie ouder dan 2.0.11 hebben.
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
2.0.12 en 2.0.13
- Nieuwe cronjob voor product afbeelingen toegevoegd. Zie: handleiding
- De progressiebalk opnieuw gemaakt ivm diverse problemen. Op basis van klant feedback.
- Nieuwe cron script (complies-cli-cron.php) beter afgeschermd voor publiekelijk toegang ivm misbruik.
- Fout in productgallery sync, deze keek niet naar de 'cpl_imageSync' instelling. Waardoor deze gewoon werkte ook al stond de afbeeldingen sync instelling uit.
- Het zoekveld op de producten pagina is aangepast. Deze verwijderd nu spaties voor en achter de waarde. Waardoor zoeken minder frustrerend is.
2.0.10 en 2.0.11
- Nieuwe cronjobs gemaakt die betrouwbaarder zijn. En ook meer werk in één keer kunnen doen.
Wij raden iedereen aan om hiervan gebruik te maken. Zie de handleiding voor meer uitleg.
2.0.9
- De plugin werkt nu met WooCommerce versie 8 en 9. Versie 9 heeft een nieuw product veld "GTIN, UPC, EAN, or ISBN". Als je WooCommerce versie 9 hebt en een product word toegevoegd of aangepast dan word dit veld met een barcode gevuld. Wil je dat alle producten een barcode krijgen, dan moet de plugin alle producten ververst, bekijk hiervoor het "Veel gestelde vragen" hoofdstuk.
2.0.8
- Nieuw product filter "No images" toegevoegd. Bij sommige klanten komt het voor dat producten in WooCommerce geen afbeeldingen hebben. Om afbeeldingen aan deze producten toe te voegen, doe het volgende: Ga naar "Complies Sync -> Products", Selecteer de "No images" filter, Klik op de "[Filter]" knop, Selecteer all producten en selecteer de bulk actie "Refresh Woo products" en klik op de "[Apply]" knop. Als je nu op de "[Sync]" knop klikt dan probeerd de plugin alle producten informatie (ook de afbeeldingen) te vernieuwen bij de producten zonder afbeelding.
2.0.7
Als je een product direct verwijderd in WooCommerce. Dan kloppen de filters "In WooCommerce", "Not in WooCommerce" en "Not in WooCommerce (no mapping)" niet meer. Dat komt omdat deze enkel binnen de plugin kijken en niet naar de huidige producten in WooCommerce. In deze versie dat niet meer zo.
Mocht je producten direct verwijderd hebben in Woocommerce, dan kun je die weer vinden met het filter "Not in WooCommerce". De verwijderde producten hebben in de plugin nog steeds een product ID, dat is het getal onder de kolom "Sync Woo product". Als je dit product weer in WooCommerce wil toevoegen, selecteer dit product dan en kies voor de de bulk optie "Remove Woo Products". Hierna kun je door op de knop "Pull" te klikken de producten weer binnen halen en toevoegen aan WooCommerce.
Uitleg bulk functie "Create Woo products" verder uitgelegd op de pagina "Gebruik -> Webshop", en dat dit een eenmalig acte is.
2.0.6
- Product prijzen in WooCommerce kunt je nu vast zetten. Zodat je producten in WooCommerce een eigen prijs kunt geven. Prijzen vastzettten doe je op de Products pagina van de plugin. Doormiddel van de nieuwe bulk acties "Set No Price Sync" en "Remove No Price Sync". Ook is er een nieuwe product filter "No price sync list" om alle producten te bekijken die een prijs hebben die is vastgezet.
- Het toevoegen van product afbeeldingen is efficienter geworden. Omdat de controle of een product een bepaalde afbeelding al heeft niet werkte. Met als gevolg dat alle afbeeldingen altijd gedownload werden, wat in de meeste gevallen niet hoeft.
- Extra plugin instelling "Automatically add daily offers" toegevoegd, deze instelling staat standaard aan. Wil je niet dat de Complies Dagaanbiedingen automatisch in je webshop komen, dan zet je deze instelling uit.
- "Not in feed" producten worden eerder verwijderd. Als deze producten niet gekoppeld zijn (Sync Woo product kolom is leeg) of als deze handmatig verwijderd zijn uit WooCommerce. Dan word deze automatisch verwijderd uit de plugin.
- Product filters sync product brok ("chunk") grote vergroot, zodat deze sync sneller werkt.
- Nieuwe product bulk actie "Refresh Woo Products" toegevoegd. Pas je deze toe op producten dan zal de plugin alle informatie (o.a. plaatjes, attributen) opnieuw proberen toe te voegen aan het product. Als bijvoorbeeld een product in Woocommerce geen afbeeldingen heeft, dan kun je deze bulk actie gebruiken om ervoor te zorgen dat het product wel plaatjes krijgt.
- Plugin instellingen pagina duidelijker gemaakt.
2.0.5
- In de vorige versie (2.0.4) zal een fout in de prijsafrond functie.
Als men deze functie al in gebruik had, werd de prijs niet meer afgerond. Dit komt omdat de nieuwe instelling initieel geen waarde heeft. Het opnieuw opslaan van deze nieuw instelling verhelpt dit probleem. In deze versie is dat niet meer nodig.
- Er zat een fout in een database query welke cache data verwijderde ivm WooCommerce product attributen. Dat is in deze versie opgelost.
2.0.4
- Fout in plugin opgelost. De fout doet zich voor als je direct Plugin versie 2 installeert zonder te upgraden vanaf versie 1. De fout zorgde ervoor dat de plugin geen nieuwe producten meer kon opslaan of aanpassen.
- De prijs afrond functie (Round Sales Price with margin to consumer prices) is aangepast. Je kunt nu zelf bepalen op hoeveel centen de functie gaat afronden. Zie omschrijving instelling, voor meer informatie.
2.0.3
- Nieuwe filter "Complies product" toegevoegd. Als je producten in de webshop hebt die niet van Complies zijn. Dan kan je met dit filter onderscheid maken tussen Complies en niet Complies producten.
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.
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.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.
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.
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.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.
← Gebruik