• Как вывести иерархическое дерево термов в WordPress?

    @weart
    function get_categories_tree(string $taxonomy = 'category'): array
    {
        $terms = get_terms([
            'taxonomy' => $taxonomy,
            'parent' => false,
            'hide_empty' => false,
        ]);
    
        if (empty($terms) || $terms instanceof WP_Error) {
            return [];
        }
    
        $categories = [];
    
        foreach ($terms as $term) {
            $categories[] = (object) [
                'value' => $term->term_id,
                'name' => $term->name,
                'children' => get_children_categories($term->term_id, $category_id),
            ];
        }
    
        return $categories;
    }
    
    function get_children_categories(int $parent_term_id, int $category_id): array
    {
        $children = array();
        $child_terms = get_terms([
            'taxonomy' => 'category',
            'parent' => $parent_term_id,
            'hide_empty' => false,
        ]);
    
        foreach ($child_terms as $child_term) {
            $child = (object) [
                'term_id' => $child_term->term_id,
                'name' => $child_term->name,
                'value' => $child_term->term_id,
            ];
    
            $grandchildren = get_children_categories($child_term->term_id, $category_id);
            if (!empty($grandchildren)) {
                $child->children = $grandchildren;
            }
    
            $children[] = $child;
        }
    
        return $children;
    }


    $list = get_categories_tree();

    Как вывести в цикле с рекурсией думаю разберетесь..
    Ответ написан
    4 комментария
  • Как правильно сравнивать значения переменных?

    Lynn
    @Lynn
    nginx, js, css
    Конкретно тут вообще никакой разницы.

    Вообще была (есть) мода так писать в качестве защиты от ошибки когда вместо сравнения пишешь присваивание.

    if (value == 42) { ... }
    // vs
    if (value = 42) { ... }
    // ^ трудно обнаруживаемая ошибка

    А так
    if (42 == value) // ok
    if (42 = value) // ошибка компиляции
    Ответ написан
    2 комментария