Создание многоуровневого меню на Wordpress

376
18 марта 2017, 03:25

Подскажите, как сделать на wordpress многоуровневое меню?
Допустим есть такой массив объектов:

$categories = get_categories( 'taxonomy=product_cat' );

Как теперь построить другой массив, чтобы если в поле category_parent не нулевое значение, тогда вложить эту подкатегорию в категорию-родитель?
Пытался сделать так:

$categoriesObj = get_categories( 'taxonomy=product_cat' );
$categories = array();
foreach ($categoriesObj as $cat) {
    $categories[] = (array)$cat;
}
$tree = [];
foreach ($categories as &$category) {
    if (!$category['category_parent'])
        $tree[$category['term_id']] = &$category;
    else{
        $categories[$category['category_parent']]['childs'][$category['term_id']] = &$category;
    }
}

но выдаёт ошибку "Undefined index: category_parent"
И желательно показать, как сделать цикл, в котором для категорий и подкатегорий задаются разные блоки при формировании html меню

Answer 1

Вроде как сделал нужное меню, но есть одна ошибка. Вообщем меню создаётся нормально, но вместо самой последней подкатегории выводится почему-то родительская категория этой подкатегории.

$categoriesObj = get_categories( 'taxonomy=product_cat' );
$categories = array();
foreach ($categoriesObj as $cat) {
    $categories[$cat->cat_ID] = (array)$cat;
}
$treeMenu = array();
foreach ($categories as $id => &$category) {
    if (!$category['category_parent'])
        $treeMenu[$id] = &$category;
    else{
        $categories[$category['category_parent']]['childs'][$category['cat_ID']] = &$category;
    }
}
foreach ( $treeMenu as $category ) {
    echo 'category_nicename='.$category['category_nicename'].'<br>';
    echo 'cat_name='.$category['cat_name'].'<br>';
    if (isset($category['childs'])) {
        $tab = '----';
        foreach ( $category['childs'] as $cat ) {
            echo $tab.'category_nicename='.$cat['category_nicename'].'<br>';
            echo $tab.'cat_name='.$cat['cat_name'].'<br>';
        }
    }
}

Если в последнем цикле сделать var_export($category), то выдаёт такую ошибку перед выводом самой последней подкатегории:

var_export does not handle circular references in

Подскажите, как устранить эту ошибку? т.е. чтобы вместо последней подкатегории выводилась не родительская категория

category1
--subcat1
--subcat2
category2
--subcat1
--subcat2
--category2
READ ALSO
Как поменять php 5.6 на версию 7.0

Как поменять php 5.6 на версию 7.0

Как поменять php 56 на версию 7

297
Не работает SQL запрос на две таблицы

Не работает SQL запрос на две таблицы

Я использую PDOПолученный результат я вывожу через foreach

238
Как удалить из строки все кроме цифр?

Как удалить из строки все кроме цифр?

Как удалить из строки все символы кроме цифры?

347
API yandex translate Кодировка text

API yandex translate Кодировка text

Получаю вот такие символы с яндекс переводчика{"code":200,"lang":"en-en","text":["пÑивеÑ"]} Как это исправить?

396