Получить пользовательскую таксономию для шорткода Visual Composer, но не работает?

Вопрос или проблема

Я создал шорткод для Visual Composer для получения терминов пользовательской таксономии. Но когда я их получаю (для выпадающего списка категорий в редакторе бэкенда Visual Composer), это не работает.

введите описание изображения здесь
Мой код:

$args1= array(
   ‘taxonomy’ => ‘danh_muc’, **// моя пользовательская таксономия**
   ‘hide_empty’ => 0,
);
$inra=array();
$danhmucs= get_terms($args1);
foreach ($danhmucs as $danhmuc) {
   $tendm=$danhmuc-> name;
   $iddm=$danhmuc-> term_id;
   $inra[$tendm]=$iddm;
}
vc_map( array(
   “name” => __(“Новости”, ‘understrap’),
   “base” => “tintuc”,
   “class” => “”,
   “category” => ‘Контент’,
   “icon” => “icon-wpb-application-icon-large”,
   “params” => array(
      array(
         “type” => “dropdown”,
         “holder” => “div”,
         “class” => “”,
         “heading” => “Категория”,
         “param_name” => “cat”,
         “value” => $inra, //**массив таксономий по имени => id**
         “description” => ‘Выберите категорию БД, для которой необходимо показать публикации’,
      ),
   )
));

Но когда я изменяю ‘taxonomy’ => ‘danh_muc’ на ‘taxonomy’ => ‘category’, все работает отлично!

Я var_dump $inra в 2 случаях: ‘taxonomy’ => ‘danh_muc’ и ‘taxonomy’ => ‘category’. Результаты одинаковые.

Спасибо всем!

На самом деле в вашей пользовательской таксономии danh_muc есть термины? get_terms не вернет ничего, если термины не были созданы.

Также, как вы создали свою пользовательскую таксономию? Обычно я полагаюсь на генератор таксономий GenerateWP.com, чтобы убедиться, что все сделано правильно.

Наконец, возможно, лучше изменить способ заполнения вашего массива $inra. Используйте идентификаторы терминов в качестве ключей, а не значений:

foreach ( $danhmucs as $danhmuc ) {
    ...
    $inra[$iddm] = $tendm;
    ...
}

Этот пост довольно старый, но он помог мне создать нужный код. Поскольку у меня есть рабочее решение, благодаря @ricotheque и @aminor1993, я хотел бы поделиться своим кодом здесь. Возможно, это поможет кому-то, кто ищет то же самое.

У меня есть пользовательский тип записи под названием ‘reference’, который имеет категории как таксономии под названием ‘reference_category’.

Я хочу, чтобы пользователь мог выбрать категорию, созданную в пользовательском типе записи “reference”, чтобы я мог показать ему элементы ссылок, которые назначены выбранной категории.

Вот мой код:

$references=array();
$reference_items = get_terms (
    array(
        "taxonomy" => "reference_category",
        "hide_empty" => 0,
    )
);
foreach ($reference_items as $item) {
    $itemName = $item-> name;
    $itemId = $item-> term_id;
    $references[$itemId] = $itemName;
}

vc_map(
    array(
        "name" => __("Ссылка"),
        "base" => "ci_vc_reference",
        "icon" => "ci-vc-icon",
        "category" => __('Colibri Interactive', 'ciframework-vc'),
        "params" => array(
            array(
                "type" => "dropdown",
                "holder" => "div",
                "class" => "",
                "heading" => __('Показать ссылки категории', 'ciframework-vc'),
                "param_name" => "category",
                "value" => $references,
            ),
       )
    )
);

Ответ или решение

Чтобы разобраться с проблемой получения пользовательских таксономий в шорткоде Visual Composer, я хотел бы обратить внимание на несколько ключевых моментов, которые могут помочь устранить неполадки.

Проверка наличия записей в таксономии

Первым делом убедитесь, что в вашей пользовательской таксономии danh_muc действительно существуют записи (термины). Если терминов нет, функция get_terms() не вернёт никаких данных, поэтому проверка на наличие терминов – это обязательный шаг:

$danhmucs = get_terms($args1);
if (empty($danhmucs) || is_wp_error($danhmucs)) {
    return; // или заложите обработку ошибок
}

Создание пользовательской таксономии

Также проверьте, правильно ли вы зарегистрировали свою пользовательскую таксономию. Создание таксономии можно сделать через стандартные функции WordPress, например, так:

function create_custom_taxonomy() {
    register_taxonomy(
        'danh_muc',  // Название таксономии
        'your_custom_post_type', // Пост тип, к которому привязана таксономия
        array(
            'label' => __( 'Danh Muc' ),
            'rewrite' => array( 'slug' => 'danh_muc' ),
            'hierarchical' => true,
        )
    );
}
add_action( 'init', 'create_custom_taxonomy' );

Заполнение массива терминов

Для создания правильного массива $inra убедитесь, что вы правильно заполняете его. Как уже упоминалось, изменение порядка ключей в массиве может помочь. Вместо использования названий терминов в качестве ключей, используйте идентификаторы:

foreach ($danhmucs as $danhmuc) {
    $inra[$danhmuc->term_id] = $danhmuc->name;
}

Полный код шорткода

Последний шаг – убедиться, что ваш код шорткода выглядит корректно. Вот возможный вариант реализации:

function your_short_code_function() {
    $args1 = array(
        'taxonomy' => 'danh_muc',  // Ваша пользовательская таксономия
        'hide_empty' => 0,
    );

    $inra = array();
    $danhmucs = get_terms($args1);

    if (!empty($danhmucs) && !is_wp_error($danhmucs)) {
        foreach ($danhmucs as $danhmuc) {
            $inra[$danhmuc->term_id] = $danhmuc->name; // Используем term_id в качестве ключа
        }
    }

    vc_map(array(
        "name" => __("News", 'understrap'),
        "base" => "tintuc",
        "class" => "",
        "category" => 'Content',
        "icon" => "icon-wpb-application-icon-large",
        "params" => array(
            array(
                "type" => "dropdown",
                "holder" => "div",
                "class" => "",
                "heading" => "Danh mục",
                "param_name" => "cat",
                "value" => $inra, // Заполняем дропдаун
                "description" => 'Chọn danh mục BĐS cần hiện bài đăng',
            ),
        )
    ));
}

Проверка работоспособности

После внесения всех вышеуказанных изменений, обязательно протестируйте вашу реализацию в редакторе Visual Composer. Если по-прежнему возникают проблемы, возможно, вы захотите обратиться к журналам ошибок или включить отладку в WordPress, чтобы найти источники проблемы.

Надеюсь, это поможет вам справиться с возникшими трудностями!

Оцените материал
Добавить комментарий

Капча загружается...