Поломались хлебные крошки dimox_breadcrumbs после перевода рубрик через wpml. Как исправить?

Ссылка скопирована
PHP
1 ответ

Сделал хлебные крошки с плавном dimox_breadcrumbs. Потом перевел рубрики через плагин wpml. После этого хлебные крошки поломались.

Выводится ошибка:

Notice: Undefined offset: 0 in /Applications/MAMP/htdocs/.../wp-content/themes/.../functions.php on line 232 Notice: Trying to get property 'cat_ID' of non-object in /Applications/MAMP/htdocs/.../wp-content/themes/.../functions.php on line 232

Notice: Undefined offset: 0 in /Applications/MAMP/htdocs/.../wp-content/themes/.../functions.php on line 232 Notice: Trying to get property 'cat_ID' of non-object in /Applications/MAMP/htdocs/.../wp-content/themes/.../functions.php on line 232

Ошибка вот в этом блоке на первой строке:

{ 				$cat = get_the_category(); $catID = $cat[0]->cat_ID; 				$parents = get_ancestors( $catID, 'category' ); 				$parents = array_reverse( $parents ); 				$parents[] = $catID; 				foreach ( $parents as $cat ) { 					$position += 1; 					if ( $position > 1 ) echo $sep; 					echo sprintf( $link, get_category_link( $cat ), get_cat_name( $cat ), $position ); 				}

{ $cat = get_the_category(); $catID = $cat[0]->cat_ID; $parents = get_ancestors( $catID, 'category' ); $parents = array_reverse( $parents ); $parents[] = $catID; foreach ( $parents as $cat ) { $position += 1; if ( $position > 1 ) echo $sep; echo sprintf( $link, get_category_link( $cat ), get_cat_name( $cat ), $position ); }

Вот полностью код плагина
https://codepen.io/danelian/pen/zYeWmXE

Как исправить?

Дополнительно:

Оказалось, что после перевода, нужно было и в русской версии назначить рубрику. Вопрос решен.

Нужно решить такую задачу?

Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

Заказать помощь
Лучший ответ
1
Frontend-редакция Ответ

Ошибка в этом блоке возникает потому, что get_the_category() вернул пустой массив, а код сразу обращается к $cat[0]. После перевода через WPML у записи может не быть рубрики в текущем языке, рубрика может быть не синхронизирована, либо код выполняется не в контексте обычной записи.

Минимальная защита:

$cats = get_the_category();
 
if (empty($cats) || !isset($cats[0])) {
    return;
}
 
$catID = (int) $cats[0]->cat_ID;

$cats = get_the_category(); if (empty($cats) || !isset($cats[0])) { return; } $catID = (int) $cats[0]->cat_ID;

Дальше уже можно строить родителей:

$parents = get_ancestors($catID, 'category');
$parents = array_reverse($parents);
$parents[] = $catID;

$parents = get_ancestors($catID, 'category'); $parents = array_reverse($parents); $parents[] = $catID;

Но это только защита от notice. Правильнее проверить настройки WPML: переведена ли рубрика, привязана ли переведённая запись к рубрике в текущем языке, синхронизируются ли таксономии для этого типа записи.

Если хлебные крошки должны работать с WPML, ссылки и названия рубрик лучше получать в текущем языке. Иногда помогает получить ID перевода термина:

$translated_cat_id = apply_filters('wpml_object_id', $catID, 'category', true);

$translated_cat_id = apply_filters('wpml_object_id', $catID, 'category', true);

Ещё один вариант — заменить самописные breadcrumbs на Yoast breadcrumbs или Rank Math breadcrumbs, если они уже стоят и нормально интегрируются с WPML. Самописная функция dimox хороша для простого сайта, но на мультиязычном проекте её часто приходится дорабатывать под переводы, пустые категории, CPT и таксономии.

Другие ответы (0)

Пока нет других ответов. Будьте первым, кто поможет автору.

Ответить на вопрос

комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Вам также может быть интересно