Вопрос или проблема
Я создал шорткод для 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, чтобы найти источники проблемы.
Надеюсь, это поможет вам справиться с возникшими трудностями!