Plugin Directory

Changeset 3462432


Ignore:
Timestamp:
02/16/2026 11:20:49 AM (5 days ago)
Author:
gkanters
Message:

Fix language switcher replacement by using stable class selectors instead of translated menu text; include current development version updates in trunk only.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • ai-translate/trunk/ai-translate.php

    r3461910 r3462432  
    66 * Author: NetCare
    77 * Author URI: https://netcare.nl/
    8  * Version: 2.2.7
     8 * Version: 2.2.8
    99 * Requires at least: 5.0
    1010 * Tested up to: 6.9
     
    30473047        function initLanguageSwitcherReplacement() {
    30483048
    3049             // Find language switcher menu items (links with href="#" containing "Language Switcher")
    3050             const languageItems = document.querySelectorAll('a[href="#"]');
    3051 
    3052             languageItems.forEach(function(link, index) {
    3053                 if (link.textContent.trim() === 'Language Switcher') {
    3054                     const listItem = link.closest('li');
    3055                     if (listItem) {
    3056                         // Replace the entire menu item
    3057                         listItem.outerHTML = <?php echo json_encode($replacement_html); ?>;
    3058                     }
     3049            // Find language switcher items by stable classes/object markers (not translated text).
     3050            const candidates = document.querySelectorAll(
     3051                'li.menu-item-language-switcher > a[href="#"], li[class*="menu-item-object-ai_language_switcher"] > a[href="#"], a.ai-menu-language-current[href="#"]'
     3052            );
     3053
     3054            candidates.forEach(function(link) {
     3055                const listItem = link.closest('li');
     3056                if (!listItem) {
     3057                    return;
     3058                }
     3059                // Replace only when not already rendered with a submenu.
     3060                if (!listItem.querySelector('.sub-menu') || !listItem.classList.contains('menu-item-language-switcher')) {
     3061                    listItem.outerHTML = <?php echo json_encode($replacement_html); ?>;
    30593062                }
    30603063            });
    30613064
    3062             // Also check for items that might have been created differently
    3063             const allMenuItems = document.querySelectorAll('li.menu-item a[href="#"]');
    3064 
    3065             allMenuItems.forEach(function(link, index) {
    3066                 if (link.textContent.includes('NL') && link.querySelector('img')) {
    3067                     // This looks like our language switcher, make sure it has submenu
    3068                     const listItem = link.closest('li');
    3069                     if (listItem && !listItem.querySelector('.sub-menu')) {
    3070                         // Add submenu if missing
    3071                         const submenu = <?php echo json_encode($submenu_html); ?>;
    3072                         listItem.insertAdjacentHTML('beforeend', submenu);
    3073                         listItem.classList.add('menu-item-has-children');
    3074                     }
     3065            // Safety net: if a language-switcher container exists without submenu, append it.
     3066            const switcherItems = document.querySelectorAll('li.menu-item-language-switcher');
     3067            switcherItems.forEach(function(listItem) {
     3068                if (!listItem.querySelector('.sub-menu')) {
     3069                    listItem.insertAdjacentHTML('beforeend', <?php echo json_encode($submenu_html); ?>);
     3070                    listItem.classList.add('menu-item-has-children');
    30753071                }
    30763072            });
Note: See TracChangeset for help on using the changeset viewer.