get_active_language_codes(); if ( count( $languages ) < 2 ) { return $schema; } if ( ! isset( $schema['sameAs'] ) ) { $schema['sameAs'] = array(); } $product_id = $product->get_id(); foreach ( $languages as $lang_code ) { $translated_id = apply_filters( 'wpml_object_id', $product_id, 'product', false, $lang_code ); // phpcs:ignore WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound -- Third-party WPML integration hook. if ( $translated_id && $translated_id !== $product_id ) { $url = apply_filters( 'wpml_permalink', get_permalink( $translated_id ), $lang_code ); // phpcs:ignore WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound -- Third-party WPML integration hook. if ( $url ) { $schema['sameAs'][] = $url; } } } // Add inLanguage to potentialAction if present. $current_lang = apply_filters( 'wpml_current_language', null ); // phpcs:ignore WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound -- Third-party WPML integration hook. if ( $current_lang ) { $schema['inLanguage'] = $current_lang; } return $schema; } /** * Trigger feed generation for each active language. * * @param string $feed_type The feed type that was generated. * * @return void */ public function trigger_language_feeds( string $feed_type ): void { $languages = $this->get_active_language_codes(); if ( count( $languages ) < 2 ) { return; } foreach ( $languages as $lang_code ) { // Switch WPML language context. do_action( 'wpml_switch_language', $lang_code ); // phpcs:ignore WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound -- Third-party WPML integration hook. if ( function_exists( 'as_schedule_single_action' ) ) { as_schedule_single_action( time(), 'aicommerce_generate_feed', array( 'feed_type' => $feed_type . '_' . $lang_code ) ); } // Restore default language. do_action( 'wpml_switch_language', null ); // phpcs:ignore WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound -- Third-party WPML integration hook. } } /** * Get all active WPML language codes. * * @return string[] Array of language codes (e.g., ['en', 'fr', 'de']). */ public function get_active_language_codes(): array { $languages = apply_filters( 'wpml_active_languages', null, array( 'skip_missing' => 0 ) ); // phpcs:ignore WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound -- Third-party WPML integration hook. return is_array( $languages ) ? array_keys( $languages ) : array( 'en' ); } }