Aangepaste velden toevoegen aan eenvoudige producten met WooCommerce

WooCommerce is aantoonbaar de meest populaire manier om producten te verkopen met behulp van WordPress. Omdat WordPress ongeveer 25% van het internet en WooCommerce voedt met ongeveer 39% van alle online winkels, is het een veilige gok om de twee in combinatie met elkaar te gebruiken als u producten aan klanten wilt verkopen.

Maar zoals bij elke andere software, zijn er soms momenten waarop wij of onze klanten de functies vaker willen uitbreiden dan wat er uit de doos wordt aangeboden. 

Voorbeeld: stel met WooCommerce dat u een eenvoudig product heeft dat u wilt verkopen, maar dat u een beetje meer informatie wilt toevoegen over het product dat aan de voorkant wordt weergegeven.

Met behulp van een aantal hooks van WooCommerce en aangepaste functionaliteit die we zullen schrijven, zullen we bekijken hoe we precies dat kunnen doen.

Vereiste hulpmiddelen

Voordat we aan de slag gaan, neem ik aan dat u de volgende instellingen (of iets vergelijkbaars) op uw computer hebt:

  • Uw besturingssysteem naar keuze - ik gebruik macOS
  • Ten minste PHP 5.6.25, hoewel ik PHP 7 ga gebruiken
  • MySQL 5.6.33
  • Apache of Nginx
  • WordPress 4.7
  • WooCommerce 3.9
  • Je favoriete IDE

Voor de rest van de zelfstudie neem ik aan dat dit allemaal is geïnstalleerd, geactiveerd en actief. 

Als u WooCommerce specifiek voor deze zelfstudie downloadt, hoeft u zich geen zorgen te maken over zaken als de betaalpagina's, algemene voorwaarden of iets dergelijks. Sterker nog, we zullen alleen geconcentreerd zijn op de meta-box Simple Product door de rest van deze tutorial.

Aangepaste velden toevoegen

Als het gaat om het werken met WordPress, draagt ​​het begrip aangepaste velden meestal een andere definitie met zich mee:

WordPress heeft de mogelijkheid om postauteurs toe te staan ​​om aangepaste velden aan een bericht toe te wijzen. Deze willekeurige extra informatie staat bekend als meta-data.

Voor niet-ontwikkelaars kan dit soort informatie een beetje ingewikkelder en onnodig zijn. Maar als je eraan gewend bent om ermee te werken, dan is het belangrijk om op te merken dat wanneer ik in deze tutorial verwijs naar aangepaste velden, ik het heb over iets compleet anders.

In plaats daarvan heb ik het over een echt tekstveld dat we zullen introduceren in de Gekoppeld product tabblad van de Eenvoudig product type.

 Maar daar komen we later in de tutorial bij. Laten we voorlopig beginnen.

1. De haken

Net als WordPress biedt WooCommerce een API waarmee we een deel van de levenscyclus van onze pagina kunnen volgen. Dus hoewel je misschien al eerder met de WordPress metadata API hebt gewerkt, is het anders met WooCommerce.

Er zijn twee haken die belangrijk zijn om te weten:

  1. woocommerce_product_options_grouping. We zullen deze functie gebruiken om een ​​beschrijving en tekstinvoer te maken die onze waarden accepteert.
  2. woocommerce_process_product_meta. We gebruiken deze haak om de waarde van onze tekstinvoer te verwerken, op te schonen en op te slaan.

Zoals bij alle hooks in WordPress, moeten deze haakjes worden gedefinieerd en vervolgens aangepaste functionaliteit voor hen worden gedefinieerd. Hoewel u dit met procedureel programmeren kunt doen, zal deze zelfstudie de functionaliteit implementeren met behulp van objectgeoriënteerd programmeren. 

2. De functionaliteit

Eerst definiëren we een klasse die een variabele sindsdien als instantiegegevens heeft. Deze variabele vertegenwoordigt de ID van het invoerveld dat in de gebruikersinterface verschijnt:

Vervolgens initialiseren we deze instantievariabele in de constructor van de klasse:

textfield_id = 'tutsplus_text_field';  

Op dit moment zijn we klaar om de hierboven genoemde haken te gebruiken. Om dit te doen, voegen we een initialisatiefunctie toe die twee aangepaste functies met de haak registreert. 

In de volgende twee secties zullen we precies zien hoe de aangepaste functionaliteit moet worden geïmplementeerd.

1. Een tekstinvoerveld toevoegen

Allereerst willen we een functie toevoegen waaraan verslaafd is woocommerce_product_options_grouping. In de init-functie die we in het vorige gedeelte hebben gedefinieerd, doen we precies hetzelfde. 

textfield_id = 'tutsplus_text_field';  openbare functie init () add_action ('woocommerce_product_options_grouping', array ($ this, 'product_options_grouping'));  public function product_options_grouping () 

Merk op dat ik de functie heb genoemd product_options_grouping. Ik vind dit het maken van de code een beetje makkelijker te lezen. Hoewel de functie op zich niet zozeer beschrijvend is voor wat de functie doet, heeft deze betrekking op de betreffende haak.

Vervolgens moeten we de functie implementeren. Om dit te doen, hebben we wat informatie nodig:

  • We hebben een ID nodig die we gebruiken om het tekstveld uniek te identificeren. We zullen de instantiegegevensset in de constructor gebruiken.
  • Een label zal worden gebruikt om een ​​bepaalde beschrijving te geven aan het invoerveld.
  • We kunnen optioneel een tijdelijke aanduiding opgeven en voor het doel van ons voorbeeld zullen we dat doen.
  • Er is een optie om een ​​tooltip weer te geven wanneer de gebruiker met een muisaanwijzer over een pictogram beweegt.
  • En we hebben de optie voor een beschrijving die we zullen gebruiken om de tekst van de tooltip te vullen.

Alle bovenstaande informatie wordt ingesteld in een associatieve array en wordt vervolgens doorgegeven aan woocommerce_wp_text_input. Dit is een WooCommerce API-functie die is ontworpen om een ​​tekstelement uit te voeren met de bovenstaande argumenten.

textfield_id = 'tutsplus_text_field';  openbare functie init () add_action ('woocommerce_product_options_grouping', array ($ this, 'product_options_grouping'));  public function product_options_grouping () $ description = sanitize_text_field ('Voer een beschrijving in die wordt weergegeven voor degenen die het product bekijken.'); $ placeholder = sanitize_text_field ('Plaag je product met een korte beschrijving.'); $ args = array ('id' => $ this-> textfield_id, 'label' => sanitize_text_field ('Product Teaser'), 'placeholder' => 'Plaag je product met een korte beschrijving', 'desc_tip' => true , 'description' => $ beschrijving,); woocommerce_wp_text_input ($ args); 

Op dit punt hebben we het eerste deel van de plug-in gedaan. We moeten de code die alles in gang zet, nog schrijven en we moeten de code die de informatie in de database slaat nog schrijven, dus laten we daar nu voor zorgen.

2. De informatie opslaan

Voeg vervolgens de volgende regels toe aan de in het methode:

Voeg daarna de add_custom_linked_field_save functie. 

textfield_id]) || wp_verify_nonce (sanitize_key ($ _POST ['woocommerce_meta_nonce']), 'woocommerce_save_data'))) return false;  $ product_teaser = sanitize_text_field (wp_unslash ($ _POST [$ this-> textfield_id])); update_post_meta ($ post_id, $ this-> textfield_id, esc_attr ($ product_teaser)); 

Ik zal een beetje praten over de implementatie van de functie in de volgende sectie.

De gegevens zuiveren

Let op in de bovenstaande functie, er gebeuren drie dingen:

  1. We controleren of er verschillende nonce-waarden aanwezig zijn. Zo niet, dan keren we terug vals. Dit is een standaard veiligheidsmaatregel. De nonce-waarden worden gedetecteerd door specifiek te kijken naar wat WooCommerce in de broncode biedt.
  2. Sanitize de gegevens in de $ _POST verzameling die overeenkomt met de invoer van de gebruiker.
  3. Sla de informatie op in de tabel met metadata voor posten.

Merk op dat we eigenlijk niets doen om de informatie aan de voorkant te tonen, dus er is geen oproep voor get_post_meta. Dit is echter hoe we informatie over de front-end zullen weergeven.

3. De teaser weergeven aan de voorkant

Om informatie over de front-end weer te geven, hebben we een cursus nodig die veel van hetzelfde werk zal doen dat we al hebben gedaan. Concreet hebben we nodig:

  • een tekstveld-ID
  • initialisatie van de ID in de constructor
  • een initialisatiefunctie om onze aangepaste code aan de front-end te koppelen
  • de werkelijke waarde weergeven

Dit opzetten is eigenlijk niet zo moeilijk, omdat we dit al hebben gedaan, dus ik ga de klas in zijn geheel hieronder doorgeven; Ik zal echter een paar opmerkingen maken over de manier waarop we deze klasse gaan instellen na de sprong:

textfield_id = 'tutsplus_text_field';  openbare functie init () add_action ('woocommerce_product_thumbnails', array ($ this, 'product_thumbnails'));  public function product_thumbnails () $ teaser = get_post_meta (get_the_ID (), $ this-> textfield_id, true); if (empty ($ teaser)) return;  echo esc_html ($ teaser); 

Het eindresultaat zou ongeveer zo moeten zijn:

Op dit moment hebben we een aantal overtollige code. Specifiek gebruiken de openbare en de administratieve klassen beide een textfield_ID en zet het op in hun constructor. Dit is een codegeur omdat deze in strijd is met het hele DROGE principe van objectgeoriënteerd programmeren.

Er zijn een aantal manieren waarop we dit kunnen beperken, zoals het doorgeven van de waarde aan de constructeurs wanneer de klassen worden geïnstantieerd, met behulp van een eenvoudig ontwerppatroon om informatie tussen de twee klassen te orkestreren, enzovoort.

In het bestand bij deze zelfstudie, die kan worden gedownload via de link in de zijbalk, ziet u hoe ik de waarde heb doorgegeven aan de constructor om het een beetje eenvoudiger te beheren.

Ten tweede merk ik op dat ik de woocommerce_product_thumbnails haak om de informatie weer te geven. Er zijn een aantal hooks beschikbaar die WooCommerce ter beschikking stelt, en ik koos deze eenvoudig uit de beschikbare hooks om het weer te geven. U kunt zich vrij voelen om de documentatie te doorzoeken om te bepalen welke haak het beste aansluit op uw behoeften. 

4. Alles bij elkaar brengen

Ten slotte is het laatste wat we moeten doen om een ​​bootstrap-bestand op te zetten waarmee de plug-in wordt gestart. We hebben dit gedaan in een aantal van mijn eerdere tutorials, dus ik ga hier niet te veel tijd aan besteden.

Hier is de code voor hoe ik het uit elkaar haal:

in het();  else $ plugin = new TutsPlus_Custom_WooCommerce_Display ('tutsplus_text_field'); $ Plugin-> init (); 

Merk op dat ik de afhankelijkheden deel en vervolgens, nadat de functie is geactiveerd, controleer ik of het dashboard wordt weergegeven of niet. Als dat het geval is, wordt het juiste deel van de plug-in geladen; anders wordt het standaardbeeldscherm geladen, dat u op de productpagina kunt zien.

Conclusie

Op dit punt hebben we alles behandeld wat we in de introductie van de tutorial wilden doen:

  • We hebben een aangepast veld toegevoegd.
  • We hebben het schoongemaakt en bewaard.
  • We hebben een openbaar aspect van de plug-in ingesteld.
  • En we hebben de inhoud opgehaald en weergegeven.

Vergeet niet de laatste werkende demo te downloaden van de zijbalk van deze pagina. Het is de grote blauwe knop in de zijbalk. Verder, als je geïnteresseerd bent in WooCommerce, vergeet dan niet om enkele van onze andere tutorials of enkele items die we op onze marktplaats hebben te bekijken.

Zoals gewoonlijk, als je op zoek bent naar ander WordPress-gerelateerd materiaal, kun je al mijn vorige tutorials op mijn profielpagina vinden en kun je me volgen op mijn blog of op Twitter. 

Vergeet niet om vragen of opmerkingen achter te laten in de feed!

Middelen

  • Aangepaste velden
  • woocommerce_product_options_grouping
  • woocommerce_process_product_meta
  • Procedureel programmeren
  • woocommerce_wp_text_input
  • esc_html
  • DROOG
  • WooCommerce in CodeCanyon