Вопрос или проблема
Я пытаюсь получить в “контент-композере” категории проектов на основе активного языка. Но я получаю только категории основного языка, никогда не другие.
Мой код:
Категория
Все
$categories = get_categories('taxonomy=jw_portfolio_categories');
if(!empty($categories)){
foreach($categories as $cat){
?><option value="<?php echo $cat->term_id; ?>"><?php echo $cat->name; ?></option><?php
}
}
?>
</select>
Есть идеи, как получить все категории или категории активного языка в админке WP?
У меня есть решение, если вы используете WPML для поддержки нескольких языков, я использовал этот код раньше. Модифицировано после вашей таксономии.
<?php
//Получить категории с текущего языка
//Использует WPML для мультиязычности
$terms = get_terms('jw_portfolio_categories','hide_empty=1' );
if ( !empty( $terms ) ) {
$term_links = "";
foreach ( $terms as $term ) {
if( $term->term_id == icl_object_id( $term->term_id,'jw_portfolio_categories', false, ICL_LANGUAGE_CODE ) ) {
?>
<option value="<?php echo $term->id; ?>"><?php echo $term->name; ?></option>
<?php
}
}
echo join( '', $term_links );
}
?>
ОБНОВЛЕНО, это должно сработать.
<?php
$category_ID = get_cat_ID ("CategoryName");
$get_correct_ID_lang = icl_object_id($category_ID, 'category', false)
$categories = get_categories('child_of=" . $get_correct_ID_lang);
foreach ($categories as $cat) {
?>
<a href="https://wordpress.stackexchange.com/questions/55025/<?php echo get_category_link($cat->cat_ID); ?>"><?php echo $cat->cat_name; ?></a>,
<?php
}
?>
Вы должны перевести свой тип записи и также создать переведенные категории для других языков.
Ответ или решение
Для корректной выборки категорий проектов на основе активного языка в WordPress с использованием мультиязычного плагина WPML, вы можете использовать следующий код. Этот код обеспечит получение категорий, привязанных к текущему языку, и корректное отображение в выпадающем списке.
Вот пример кода, который можно использовать:
<?php
// Получаем термины из таксономии 'jw_portfolio_categories', исключая пустые
$terms = get_terms(array(
'taxonomy' => 'jw_portfolio_categories',
'hide_empty' => true,
));
if (!empty($terms) && !is_wp_error($terms)) {
// Массив для хранения ссылок на термины
$term_links = "";
foreach ($terms as $term) {
// Проверяем наличие ID термина для текущего языка
$translated_term_id = icl_object_id($term->term_id, 'jw_portfolio_categories', false, ICL_LANGUAGE_CODE);
// Убедитесь, что перевод существует
if ($translated_term_id) {
$translated_term = get_term($translated_term_id, 'jw_portfolio_categories');
if ($translated_term) {
// Добавляем опцию в выпадающий список
$term_links .= '<option value="' . esc_attr($translated_term->term_id) . '">' . esc_html($translated_term->name) . '</option>';
}
}
}
// Выводим выпадающий список
echo '<select name="project_categories">';
echo '<option value="">Все</option>'; // Опция "Все" для выбора всех категорий
echo $term_links;
echo '</select>';
}
?>
Объяснение кода:
- Получение категорий: Используется функция
get_terms
, которая получает термины из заданной таксономии и исключает пустые. - Итерация по терминам: Каждая полученная категория проверяется на наличие перевода.
- Функция
icl_object_id
: Эта функция используется для получения переведенного ID термина для текущего языка, настроенного в WPML. - Проверка на наличие перевода: Если перевод существует, мы получаем термин с помощью
get_term
и добавляем его в выпадающий список. - Вывод: Выпадающий список формируется с опцией "Все" и всеми категориями на текущем языке.
Важно:
- Убедитесь, что все категории переведены на нужные языки через интерфейс WPML в админке.
- Код выше должен быть размещен в нужном месте вашего шаблона или плагина, чтобы работать соответствующим образом.
Следуя этому подходу, вы сможете корректно отобразить категории проектов в соответствии с выбранным языком в вашей админ-панели WordPress.