Я использую get_category()
чтобы получить объект категории по его идентификатору. Здесь category 39
является дочерью category 37
. Например,
Courses (37) - Programming (39)
Моя проблема в том, что если я использую get_category(37 or 39)
в functions.php
BOTH вернет null
. Если я использую get_category(37 or 39)
в single-product.php
37 (корневая категория), то возвращается null. Если я использую тот же самый вызов в add-to-cart/simple.php
оба возвращают объект.
Сначала будут вызываться функции WooCommerce, а затем шаблоны single-product.php
и add-to-cart/simple.php
.
Что происходит?
Почему это работает в зависимости от файла?
@редактировать
get_term( 37, 'category' );
похоже, тоже
@edit 13/7 – Правильное рабочее решение
Мне удалось решить эту проблему, прежде чем читать ответы:
$category = get_term_by('id', $category_id, 'product_cat');
Рекомендации:
Вы не можете использовать get_category()
или get_term()
напрямую с идентификатором везде. Вам нужно использовать больше аргументов, перечисленных здесь (см. Пример ниже) . На шаблонах я думаю, что это также зависит от отображаемых продуктов (если у них есть эта категория или подкатегория).
Чтобы получить желаемый объект категории, вам нужно будет сделать это по категории slug, и вместо этого вы будете использовать
get_category_by_slug('the_slug')
. Затем вы можете получить идентификатор с помощью:$idObj = get_category_by_slug('my_category_slug'); $id = $idObj->term_id;
Другие полезные функции WordPress:
Чтобы получить название категории на основе идентификатора категории, вам нужно будет использовать get_the_category_by_ID()
.
Вы также можете получить идентификатор по названию категории, и вы будете использовать get_cat_ID( 'cat_name' )
.
Список категорий продуктов и подкатегорий с помощью get_category()
(пример) :
Здесь приведен пример функции, основанной на этом потоке , который будет перечислять все категории продуктов и подкатегории (везде) :
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 '<ul>'; foreach ($all_categories as $cat) { if($cat->category_parent == 0) { $category_id = $cat->term_id; echo '<li><a href="'. get_term_link($cat->slug, 'product_cat') .'">'. $cat->name .'</a></li>'; $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 '<ol>'; if($sub_cats) { foreach($sub_cats as $sub_category) { echo '<li><a href="'. get_term_link($sub_category->slug, 'product_cat') .'">' . $sub_category->name .'</a></li>'; } } echo '</ol>'; } } echo '</ul>'; }
Чтобы использовать его, просто поместите его туда, где хотите: <?php products_cats_subcats() ;?>
Это отобразит все ваши категории и подкатегории, иерархически упорядоченные по имени , с соответствующей ссылкой для каждой категории или подкатегории.
Затем вы можете также использовать get_term_by () для получения названия категории или пули:
$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
Теперь вы сможете создавать свои собственные функции, чтобы удовлетворить ваши потребности …
Справка: