I’m working with the woo commerece plugin and i’d like to have a sub heading under the title of each product.
Style and format is sorted however i want a particular Category to show in the sub heading section. I’ve managed to get as far as showing all categories but i want to narrow this down to just one category that is under a parent category.
Below is the code i am using, could anyone suggest how i could achieve showing any child category selected under a parent category.
Thanks
<?php
/**
* Single Product title
*
* @author WooThemes
* @package WooCommerce/Templates
* @version 1.6.4
*/
if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly
global $post, $product;
$cat_count = sizeof( get_the_terms( $post->ID, 'product_cat' ) );
?>
<h1 itemprop="name" class="product_title entry-title"><?php the_title(); ?></h1>
<?php echo $product->get_categories( ', ', '<span class="posted_in">' . _n( 'Artist:', 'Artist:', $cat_count, 'woocommerce' ) . ' ', '.</span>' ); ?>
This is what came out:
Array ( [0] => stdClass Object ( [term_id] => 59 [name] => Colourful
[slug] => colourful [term_group] => 0 [term_taxonomy_id] => 59
[taxonomy] => product_cat [description] => [parent] => 115 [count] =>
21 [filter] => raw ) [1] => stdClass Object ( [term_id] => 96 [name]
=> Karen Grant [slug] => karen-grant [term_group] => 0 [term_taxonomy_id] => 96 [taxonomy] => product_cat [description] =>
[parent] => 90 [count] => 5 [filter] => raw ) [2] => stdClass Object (
[term_id] => 69 [name] => Landscapes [slug] => landscapes [term_group]
=> 0 [term_taxonomy_id] => 69 [taxonomy] => product_cat [description] => [parent] => 115 [count] => 35 [filter] => raw ) [3] => stdClass Object ( [term_id] => 71 [name] => Nature [slug] => nature
[term_group] => 0 [term_taxonomy_id] => 71 [taxonomy] => product_cat
[description] => [parent] => 115 [count] => 20 [filter] => raw ) )
<?php
/**
* Single Product title
*
* @author WooThemes
* @package WooCommerce/Templates
* @version 1.6.4
*/
if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly
global $post, $product;
$cat_count = sizeof( get_the_terms( $post->ID, 'product_cat' ) );
?>
<h1 itemprop="name" class="product_title entry-title"><?php the_title(); ?></h1>
<?php
global $post, $product;
$cat_array = array();
$term_list = wp_get_post_terms($post->ID, 'product_cat', array("fields" => "all")); //get array containing category details
foreach($term_list as $cat_list)
{
array_push($cat_array, $cat_list->term_id);
}
$cat_id = ($term_list[0]->parent); //get parent category ID from the above generated array
$termchildren = get_term_children( '90' , 'product_cat' ); //New Line in Updattion -1
$final_result = array_intersect($cat_array,$termchildren); print_r($final_result);
$new_cat_id = $final_result[0];
$cat_url = get_term_link ($new_cat_id, 'product_cat'); //get link of parent ID
$term = get_term( $new_cat_id, 'product_cat' ); //Get Name of the parent from the parent ID
$name = $term->name; //Store it into an varialbe
echo "Artist: <a href='".esc_url($cat_url)."'>".$name."</a>";
?>
‘
Try this :
Remember :
In
WooCommerce
, products categories are not normal categories, they are a custom taxonomy created specifically for products which is just labeled as “Categories”.Let me know If you have any doubt.
Updated:
New Updated(02 January 2015)
Line : 1
$post
and$product
both are the global variables.So in term to use that in other files, we need to add that in our file before using it.Line : 2 One blank array to store all the categories of the current product**.We will use it in a future.
Line : 3
wp_get_post_terms
is used to retrieve the terms of the post(for woocommerce its category for product).So now we have an array containing all the details of terms withID, name
etc etcLine : 4 It is for the loop through above generated array.We will loop through an array and look for
term_id
.We will usearray_push
to store all the term ID and for storing we will use blank array from line 2.So now we have an array ofterm_id
.Line : 9 Now we will use
get_term_children
to retrieve the children term of Artist as we know the artistterm ID
and its fixed.It will give an array as an output.Line : 10
array_intersect
is useful to match two array and fetch out only matching values.(Basically we are looking in to the current product category and all artist category to take out the matching category only).Line : 11
array_values
is useful to re-index the array.(By adding this line we solve the error that was coming 🙂 )Line : 12 Now we have an array that is having only one value which is artist’s
term ID
.(That’s it.Now you need to fetch only name and link of the artist from that term ID)Line : 13 Fetch link of the artist.
Line : 15 Fetch name of the artist from an array generated in line 14 and store it in variable.
Line : 16 Print the needed thing and we are done !