$ids */ public static function preferDefaultPost(array $ids): int { return self::prefer($ids, 'post'); } /** * @param list $ids */ public static function preferDefaultTerm(array $ids): int { return self::prefer($ids, 'term'); } /** * Новому товару — основной язык (иначе Polylang оставит его «без языка»). */ public static function assignDefaultPost(int $id): void { if (function_exists('pll_set_post_language') && function_exists('pll_is_translated_post_type') && pll_is_translated_post_type('product') && !pll_get_post_language($id)) { pll_set_post_language($id, pll_default_language()); } } public static function assignDefaultTerm(int $id, string $taxonomy): void { if (function_exists('pll_set_term_language') && function_exists('pll_is_translated_taxonomy') && pll_is_translated_taxonomy($taxonomy) && !pll_get_term_language($id)) { pll_set_term_language($id, pll_default_language()); } } /** * @param list $ids */ private static function prefer(array $ids, string $kind): int { if (count($ids) < 2) { return $ids[0] ?? 0; } if (function_exists('pll_default_language')) { $default = pll_default_language(); foreach ($ids as $id) { $lang = $kind === 'post' ? pll_get_post_language($id) : pll_get_term_language($id); if ($lang === $default) { return $id; } } } elseif (has_filter('wpml_default_language')) { // Публичный API плагина WPML (не наши хуки). $default = apply_filters('wpml_default_language', null); // phpcs:ignore WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound foreach ($ids as $id) { $type = $kind === 'post' ? get_post_type($id) : 'product_cat'; $lang = apply_filters('wpml_element_language_code', null, ['element_id' => $id, 'element_type' => $type]); // phpcs:ignore WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound if ($lang === $default) { return $id; } } } return $ids[0]; } }