No se puede obtener el objeto de categoría en algunas plantillas de WooCommerce

Estoy usando get_category() para obtener el objeto de categoría por su ID. Aquí la category 39 es hija de la category 37 . Por ejemplo,

 Courses (37) - Programming (39) 

Mi problema es que, si uso get_category(37 or 39) en functions.php Both devolverá null . Si uso get_category(37 or 39) en single-product.php 37 (la categoría raíz) devolverá nulo. Si utilizo esta misma llamada en add-to-cart/simple.php ambos devolverán un Object.

Las funciones de WooCommerce serán llamadas primero, y luego single-product.php y luego add-to-cart/simple.php .

¿Que esta pasando?
¿Por qué funciona según el archivo?


@editar

 get_term( 37, 'category' ); 

parece fallar también


@edit 13/7 – La solución de trabajo correcta

Logré resolver este problema antes de leer las respuestas con:

 $category = get_term_by('id', $category_id, 'product_cat'); 

Referencias

  • Función get_term_by ()
  • Mostrar lista de categorías con títulos
  • Cómo obtener el nombre de la categoría de un producto de identificación en woocommerce

No puede usar get_category() o get_term() directamente con una ID en todas partes. Debe usar más argumentos enumerados aquí (vea el ejemplo a continuación) . En las plantillas, creo que también depende de los productos mostrados (si tienen esta categoría o subcategoría).

Para recuperar el objeto de categoría deseado, tendrá que hacerlo por categoría slug y, en su lugar, usará get_category_by_slug('the_slug') . Luego puede recuperar la ID con:

 $idObj = get_category_by_slug('my_category_slug'); $id = $idObj->term_id; 

Otras funciones útiles de WordPress:
Para recuperar el nombre de la categoría en función de la ID de categoría, deberá usar get_the_category_by_ID() .
También puede recuperar la ID por nombre de categoría y usará get_cat_ID( 'cat_name' ) .


Listado de categorías y subcategorías de productos con get_category() (ejemplo) :

Aquí hay un ejemplo de una función basada en este hilo , que listará todas las categorías de productos y subcategorías (en todas partes) :

 function products_cats_subcats(){ $taxonomy = 'product_cat'; $orderby = 'name'; $show_count = 0; // 1 for yes, 0 for no $pad_counts = 0; // 1 for yes, 0 for no $hierarchical = 1; // 1 for yes, 0 for no $title = ''; $empty = 0; $args = array( 'taxonomy' => $taxonomy, 'orderby' => $orderby, 'show_count' => $show_count, 'pad_counts' => $pad_counts, 'hierarchical' => $hierarchical, 'title_li' => $title, 'hide_empty' => $empty ); $all_categories = get_categories( $args ); echo '
    '; foreach ($all_categories as $cat) { if($cat->category_parent == 0) { $category_id = $cat->term_id; echo '
  • '. $cat->name .'
  • '; $args2 = array( 'taxonomy' => $taxonomy, 'child_of' => 0, 'parent' => $category_id, 'orderby' => $orderby, 'show_count' => $show_count, 'pad_counts' => $pad_counts, 'hierarchical' => $hierarchical, 'title_li' => $title, 'hide_empty' => $empty ); $sub_cats = get_categories( $args2 ); echo '
      '; if($sub_cats) { foreach($sub_cats as $sub_category) { echo '
    1. ' . $sub_category->name .'
    2. '; } } echo '
    '; } } echo '
'; }

Para usarlo, simplemente colócalo donde quieras: < ?php products_cats_subcats() ;?>

Esto mostrará todas sus categorías y subcategorías jerárquicamente ordenadas por Nombre , con el enlace correspondiente para cada categoría o subcategoría.


Luego también puedes usar get_term_by () para obtener el nombre de categoría o slug:

 $term = get_term_by('id', $term_id, 'product_cat', 'ARRAY_A'); $term['name']; //get the WC category name $term['slug']; //get the WC category slug 

Entonces, ahora podrá construir sus propias funciones, según sus necesidades …


Referencia:

  • Obtener categorías de WordPress Woocommerce
  • Referencia de código> Funciones> get_categories () *
  • Referencia de código> Funciones> get_terms () (y todos los argumentos opcionales) *
  • Referencia de código> Función get_term_by ()