WordPress как на ладони
wordpress jino

Глобальный хук для term name

Подскажите пожалуйста, какой хук использовать, чтобы переписывать заголовок терминов (любых, кастомных и стандатных). Сейчас дописываю свой скрипт мультиязычности. Вот пример на the_title:

  function translate_title( $title, $id = null ) {

		$item = get_post( $id );

	  if ( $item->post_type != 'nav_menu_item' ) {

		  global $lang;

				if ($lang != 'ru') {
			  $translated = get_post_meta($id, 'title_' . $lang, true);
			  if (empty($translated)) {
				$translated_fallback = get_post_meta($id, 'title_en', true);
				if (empty($translated_fallback)) {
				  return $title;
				} else {
				  return $translated_fallback;
				}
			  } else {
				  return get_post_meta($id, 'title_' . $lang, true);
			  }
				} else {
						return $title;
				}

	  } else {
				return $title;
		}
  }
  add_filter( 'the_title', 'translate_title', 10, 2 );

Данный код успешно переводит как заголовки на странице, так и заголовки в меню.

А вот код, который я написал для категорий:

  function translate_cat_title( $term_name ) {

	  global $lang;
			if ($lang != 'ru') {
		  $translated = get_term_meta( get_cat_ID( $term_name ), 'name_' . $lang, true );
		  if (empty($translated)) {
			$translated_fallback = get_term_meta( get_cat_ID( $term_name ), 'name_en', true );
			if (empty($translated_fallback)) {
			  return $term_name;
			} else {
			  return $translated_fallback;
			}
		  } else {
			  return get_term_meta( get_cat_ID( $term_name ), 'name_' . $lang, true );
		  }
			} else {
					return $term_name;
			}

  }
  add_filter( 'single_cat_title', 'translate_cat_title' );

Как видно из кода - он работает для single_cat_title, но элементы меню уже не переводит и, подозреваю, не будет переводить кастомные термины (ещё не успел проверить).

Jackky 6 месяцев назад

Короче, вроде сам решил)) Работает великолепно, ошибок не выдаёт:

  function translate_term_title( $term ) {

	  global $lang;
			if ($lang != 'ru') {
		  $term->name = get_term_meta( $term->term_id, 'name_' . $lang, true );
		  return $term;
		  if (empty($translated)) {
			$translated_fallback = get_term_meta( $term->term_id, 'name_en', true );
			if (empty($translated_fallback)) {
			  return $term;
			} else {
			  return $translated_fallback;
			}
		  } else {
			$term->name = get_term_meta( $term->term_id, 'name_' . $lang, true );
			  return $term;
		  }
			} else {
					return $term;
			}

  }
  add_filter( 'get_term', 'translate_term_title' );
0
Jackky2 6 месяцев назад

Нет ответов на этот вопрос.

На вопросы могут отвечать только зарегистрированные пользователи. Регистрация. Вход.