it-swarm.com.de

woocommerce - Wie bekomme ich die oberste Kategorie der aktuellen Produktkategorie?

Ich habe ein Woocommerce-Produkt, und ich muss auf dieser Seite die Kategorie der höchsten Ebene einer dem Produkt zugewiesenen Kategorie anzeigen

- Main Product Category
-- Sub Product Category
--- Category Assigned to product

Ich muss die ID oder den Namen der "Hauptproduktkategorie" erhalten, damit ich sie in der einzelnen Produktkategorie anzeigen kann. 

Ich habe schon folgendes versucht:

global $post;
$terms = get_the_terms( $post->ID, 'product_cat' );

foreach ($terms as $term) {
$product_cat_id = $term->term_id;

$thetop_parent = woocommerce_get_term_top_most_parent( $product_cat_id , 'product_cat' );

echo $thetop_parent;
}

Aber es hat überhaupt nicht funktioniert und es bremst die Seite nach dem Woocomerce_get_term-Laden ab ... Ich bin mir nicht sicher, was ich an diesem Punkt tun soll

danke für jede hilfe dazu.

10
Gman

Nach langer Recherche habe ich einen Weg gefunden, um das zu lösen. Ich hoffe das hilft jemandem. 

lösung:

global $post;
$prod_terms = get_the_terms( $post->ID, 'product_cat' );
foreach ($prod_terms as $prod_term) {

    // gets product cat id
    $product_cat_id = $prod_term->term_id;

    // gets an array of all parent category levels
    $product_parent_categories_all_hierachy = get_ancestors( $product_cat_id, 'product_cat' );  



    // This cuts the array and extracts the last set in the array
    $last_parent_cat = array_slice($product_parent_categories_all_hierachy, -1, 1, true);
    foreach($last_parent_cat as $last_parent_cat_value){
        // $last_parent_cat_value is the id of the most top level category, can be use whichever one like
        echo '<strong>' . $last_parent_cat_value . '</strong>';
    }

}
22
Gman

oder vielleicht das:

$cat = get_the_terms( $product->ID, 'product_cat' );

foreach ($cat as $categoria) {
if($categoria->parent == 0){
   echo $categoria->name;
}
}
21
Mauro

Ich weiß, dass dies ein alter Beitrag ist, aber ich hatte eine ähnliche Situation, in der wir die Wurzelkategorie des aktuellen Produkts abrufen mussten. Die einfachste Lösung, die ich mir vorstellen konnte, war zu sehen, wie WooCommerce seine Breadcrumbs ausführt, und dieser Code ist der Trick für mich:

if ( is_product() ) {
    global $post;
    $terms = wc_get_product_terms( $post->ID, 'product_cat', array( 'orderby' => 'parent', 'order' => 'DESC' ) );
    if ( ! empty( $terms ) ) {
        $main_term = $terms[0];
        $ancestors = get_ancestors( $main_term->term_id, 'product_cat' );
        if ( ! empty( $ancestors ) ) {
            $ancestors = array_reverse( $ancestors );
            // first element in $ancestors has the root category ID
            // get root category object
            $root_cat = get_term( $ancestors[0], 'product_cat' );
        }
        else {
            // root category would be $main_term if no ancestors exist
        }
    }
    else {
        // no category assigned to the product
    }
}
6
thorne51

Hier die Lösung, die ich tatsächlich verwende

function get_parent_terms($term) {
    if ($term->parent > 0){
        $term = get_term_by("id", $term->parent, "product_cat");
        return get_parent_terms($term);
    }else{
        return $term->term_id;
    }
}
global $wp_query;
$cat_obj = $wp_query->get_queried_object();
$Root_Cat_ID = get_parent_terms($cat_obj);
4
Nicolas GRILLET

Dies ist die Funktion, die ich für die Verwendung entwickelt habe.

/**
 * Get product's top category
 * @param int $pid. The product ID
 *
 * @return int. Returns product categories parent ID
 */
 function get_product_top_category($pid) {
    global $wpdb;
    $cat_id = $wpdb->get_var('SELECT b.term_id FROM '.$wpdb->prefix.'term_relationships a, '.$wpdb->prefix.'term_taxonomy b WHERE a.object_id = "'.$pid.'" AND a.term_taxonomy_id = b.term_taxonomy_id AND b.parent = "0" AND b.taxonomy = "product_cat" LIMIT 1');
    return $cat_id;
 }

Auf diese Weise können Sie die oberste Kategorie des aktuellen Produkts abrufen

$top_level_term = get_product_top_category($post->ID);

Eine Einschränkung dieses Codes besteht darin, dass mehrere Hauptkategorien eines Produkts zurückgegeben werden können. Um das zu bekämpfen, habe ich LIMIT 1, um nur eine Kategorie zurückzugeben, die mir zusagt.

0

Hier, wenn Sie eine "category_ID" haben

/*If you dont have a category ID use this: 
*       $category_ID = get_queried_object()->term_id;
* This will get you the current category_ID 
*/

$termid = get_term($category_ID, 'product_cat' );
    if($termid->parent > 0) 
    {                       // get the parent's hierarchy.
        $cat_hierachy = get_ancestors( $category_ID, 'product_cat' );  
        return end($cat_hierachy); // returns the Level-1 category_ID
    }
    return $category_ID; // Has no parent so return THIS category_ID  Level-1