content; } private function get_active_languages() { $langs = Settings::get_languages_option(); $items = isset( $langs['items'] ) && is_array( $langs['items'] ) ? $langs['items'] : []; $active = []; foreach ( $items as $code => $row ) { if ( ! empty( $row['active'] ) ) { $active[ $code ] = $row; } } uasort( $active, function( $a, $b ){ return (int) $a['order'] <=> (int) $b['order']; } ); return $active; } private function get_default_language() { $langs = Settings::get_languages_option(); return isset( $langs['default'] ) ? sanitize_key( $langs['default'] ) : ''; } private function get_pages_by_language( $lang_code ) { $args = [ 'post_type' => 'page', 'post_status' => [ 'publish', 'draft', 'private' ], 'posts_per_page' => -1, 'orderby' => 'title', 'order' => 'ASC', 'fields' => 'ids', ]; if ( $lang_code === '__unassigned__' ) { $args['meta_query'] = [ [ 'key' => Content::META_LANG, 'compare' => 'NOT EXISTS', ], ]; } else { $args['meta_query'] = [ [ 'key' => Content::META_LANG, 'value' => $lang_code, ], ]; } return get_posts( $args ); } private function get_menu_switching_option() { $opt = get_option( 'abdiel_amm_menu_switching', [] ); return is_array( $opt ) ? $opt : []; } private function get_registered_menu_locations() { $regs = get_registered_nav_menus(); return is_array( $regs ) ? $regs : []; } private function get_all_menus_for_dropdown() { $out = []; $terms = wp_get_nav_menus(); if ( ! is_array( $terms ) ) { return $out; } foreach ( $terms as $t ) { if ( is_object( $t ) && isset( $t->term_id ) ) { $out[ absint( $t->term_id ) ] = $t->name; } } return $out; } public function render_page() { if ( ! current_user_can( 'manage_options' ) ) { return; } $active = $this->get_active_languages(); if ( empty( $active ) ) { echo '
' . esc_html__( 'Configure languages first (Abdiel Multilingual → Languages).', 'abdiel-multilingual-manager' ) . '
Developed by JoseAbdiel.com
get_default_language(); if ( $base === '' ) { $base = '__unassigned__'; } $active = $this->get_active_languages(); // Assignment payload. $payload_raw = isset( $_POST['abdiel_amm_assign'] ) && is_array( $_POST['abdiel_amm_assign'] ) ? wp_unslash( $_POST['abdiel_amm_assign'] ) : []; $payload = []; if ( is_array( $payload_raw ) ) { foreach ( $payload_raw as $base_id => $row ) { $base_id = absint( $base_id ); if ( $base_id <= 0 || ! is_array( $row ) ) { continue; } foreach ( $row as $lang_code => $target_id ) { $lang_code = sanitize_key( (string) $lang_code ); $target_id = absint( $target_id ); if ( $lang_code === '' ) { continue; } $payload[ $base_id ][ $lang_code ] = $target_id; } } } // Save menu switching settings (optional, stored separately). $menu_enabled = ! empty( $_POST['abdiel_amm_menu_enabled'] ) ? 1 : 0; $menu_apply_elementor = ! empty( $_POST['abdiel_amm_menu_apply_elementor'] ) ? 1 : 0; $menu_map_raw = isset( $_POST['abdiel_amm_menu_map'] ) && is_array( $_POST['abdiel_amm_menu_map'] ) ? wp_unslash( $_POST['abdiel_amm_menu_map'] ) : []; $menu_map = []; if ( $menu_enabled ) { foreach ( $menu_map_raw as $loc => $langs ) { $loc = sanitize_key( (string) $loc ); if ( ! is_array( $langs ) ) { continue; } foreach ( $langs as $code => $menu_id ) { $code = sanitize_key( (string) $code ); $mid = absint( $menu_id ); if ( $mid > 0 ) { $menu_map[ $loc ][ $code ] = $mid; } } } } update_option( 'abdiel_amm_menu_switching', [ 'enabled' => $menu_enabled, 'apply_elementor' => $menu_enabled ? $menu_apply_elementor : 0, 'map' => $menu_map, ] ); foreach ( $payload as $base_id => $row ) { $base_id = absint( $base_id ); if ( $base_id <= 0 ) { continue; } if ( ! is_array( $row ) ) { continue; } $map = []; // Determine base language code for the base post. $base_lang = get_post_meta( $base_id, Content::META_LANG, true ); $base_lang = is_string( $base_lang ) ? sanitize_key( $base_lang ) : ''; if ( $base_lang === '' ) { // If base page is unassigned, use selected base if it's a real code; else use default. if ( $base !== '__unassigned__' && isset( $active[ $base ] ) ) { $base_lang = $base; } else { $base_lang = $default; } } if ( $base_lang !== '' ) { $map[ $base_lang ] = $base_id; } foreach ( $row as $lang_code => $target_id ) { $lang_code = sanitize_key( $lang_code ); if ( empty( $active[ $lang_code ] ) ) { continue; } $target_id = absint( $target_id ); if ( $target_id > 0 ) { $map[ $lang_code ] = $target_id; } } // If no links, still keep base in its group/map. if ( empty( $map ) ) { continue; } $group = get_post_meta( $base_id, Content::META_GROUP, true ); $group = is_string( $group ) ? $group : ''; if ( $group === '' ) { $group = 'g' . wp_generate_password( 12, false, false ); } // Save on all involved posts. foreach ( $map as $code => $pid ) { $pid = absint( $pid ); if ( $pid <= 0 ) { continue; } update_post_meta( $pid, Content::META_GROUP, $group ); update_post_meta( $pid, Content::META_MAP, $map ); // If target has no language assigned, set it to the column language. $t_lang = get_post_meta( $pid, Content::META_LANG, true ); if ( empty( $t_lang ) && $code !== '' ) { update_post_meta( $pid, Content::META_LANG, $code ); } } } $redirect = add_query_arg( [ 'page' => 'abdiel-amm-assignments', 'base' => $base, 'updated' => '1', ], admin_url( 'admin.php' ) ); wp_safe_redirect( $redirect ); exit; } }