Custom Post Type toevoegen als product aan Woocommerce

De grootste vraag in WooCommerce waar niemand een oplossing voor lijkt te hebben: “Hoe kan ik een custom post type aan WooCommerce toevoegen?”.

WooCommerce heeft zijn eigen aangepaste berichttype, custom post type, “product” voor zijn catalogus of winkel. Wat leidt tot de vraag, hoe je je eigen custom post type kon toevoegen. Op het moment van schrijven heeft WooCommerce geen ingebouwde functies of filters die dit gemakkelijk kunnen doen. Kortom, WooCommerce ondersteunt het niet.

Wat een teleurstelling als je al een website met producten en catalogi hebt mbv. custom post types. En je geen tijd en budget hebt om dit te migreren naar een Woocommerce omgeving met aangepast thema.

Is er dan geen oplossing? Jawel hoor, lees snel verder.

De eerste stap. Een product (elk berichttype) kan aan de winkelwagen worden toegevoegd als deze een prijs heeft. Dat gezegd hebbende, moet uw berichttype een aangepaste veldprijs (custom field) hebben. Als je thema dit al ondersteunt, dan zou dat geweldig zijn (zo niet, dan zullen we er een maken). We moeten er alleen voor zorgen dat de meta-key “_price” is. Hoe controleer je dat? U kunt proberen het element te inspecteren via de browser. Ga naar de admin-pagina van je berichttype. Probeer een bericht toe te voegen of te bewerken op de adminpagina van je berichttype. Zoek naar het tekstvak met het prijsetiket en klik met de rechtermuisknop op het tekstvak. Je zou het kenmerk moeten vinden “_price”. Meestal is de naam de meta-key voor een aangepast veld (custom field).

 

 

 

Als je meta-sleutel toevallig geen “_price” is, maak je geen zorgen, we hebben daar een oplossing voor. Voeg deze code toe aan uw functions.php (skip if your meta key is “_price”). Als je meta-key “_price” is, doe dan zoiets als dit:

<?php
add_filter(woocommerce_get_price,reigel_woocommerce_get_price,20,2);
function reigel_woocommerce_get_price($price,$post){
if ($post->post->post_type === post)
$price = get_post_meta($post->id, price, true);
return $price;
}

Regel # 4 hierboven zal controleren op uw custom post type. In het bovenstaande codevoorbeeld probeer ik de post meta price te krijgen en deze terug te sturen. Ik controleer ook of het berichttype “post” is, zodat andere berichttypen niet worden beïnvloed.

U kunt nu elk bericht toevoegen waarvoor de prijs is ingesteld. Dus nadat u de prijs van een bericht heeft ingesteld, voegt u “? Add-to-cart = ID” toe aan de URL van uw browser. Waar ID de ID van uw post is. Dus als de ID van uw post1 is, moet uw link zo zijn: http://localhost/wordpress/cart/?add-to-cart=1.

Na het bezoeken van die link, ziet u iets als deze afbeelding hieronder.

 

 

 

 

 

 

 

 

 

 

 

De volgende stap. Als je nu een bericht aan het winkelwagentje kunt toevoegen, moeten we nu onze knop ‘Toevoegen aan winkelwagentje’ maken. Er zijn veel manieren waarop dit kan worden gedaan. Maar het doel is om een formulier te hebben met de hoeveelheid en een knop ‘Toevoegen aan winkelwagentje’.

Plak dit in je functions.php: (ik gebruik het ‘_content’ filter, maar gebruik alsjeblieft een andere filter / actie die past bij jouw project.)

<?php
add_filter(the_content,rei_add_to_cart_button, 20,1);
function rei_add_to_cart_button($content){
global $post;
if ($post->post_type !== post) {return $content; }
ob_start();
?>
<form action= method=post>
<input name=add-to-cart type=hidden value=<?php echo $post->ID ?> />
<input name=quantity type=number value=1 min=1 />
<input name=submit type=submit value=Add to cart />
</form>
<?php
return $content . ob_get_clean();
}

Deze code voegt het aantal en de “Toevoegen aan winkelwagen” knop toe aan je post type. Houd er rekening mee dat we het post type nog steeds controleren om andere berichttypen niet te beïnvloeden.

 

 

 

 

 

 

 

 

 

 

U kunt het formulier plaatsen waar u maar wilt. U kunt zelfs het formulier in uw single- {post_type} .php plakken. Een ander punt van aandacht is dat je “wc_print_notices ()” functie in je single- {post_type} .php moet aanroepen. Hierdoor worden de berichten zoals “” Hallo wereld! ” toegevoegd aan uw winkelwagen.”.

Geplaatst in de categorie: Blog