WPML
状态
已由作者解决
解决于
MapPress 2.95.7
相关插件/主题
MapPress Maps for WordPress
主题标签
Compatibility

问题概述

当将 MapPress 与 WPML 结合使用时,您可能会发现保存到地图中的城市等兴趣点(POI)未被翻译。这是因为 POI 字符串是基于创建时所用的语言保存的,无法自动用于翻译。

临时解决方法

在继续操作之前,请确保对您的站点进行完整备份


  • 将以下代码添加到主题的 functions.php 文件中。
    // WPML Workaround for compsupp-4265: Translate Mappress POI fields
    if ( class_exists('Sitepress') ) { 
    
    	add_action('mappress_map_save', 'my_mappress_register_poi_strings');
    	function my_mappress_register_poi_strings($map) {
    
    		$fields = array('address','title','name','body');
    		if (empty($map->mapid) || empty($map->pois) || !is_array($map->pois))
    			return;
    
    		foreach ($map->pois as $i => $poi) {
    			foreach ($fields as $field) {
    				if (isset($poi->$field) && $poi->$field !== '') {
    					$key = "map_{$map->mapid}_poi_{$i}_{$field}";
    					do_action( 'wpml_register_single_string','mappress', $key, $poi->$field );
    				}
    			}
    		}
    	}
    
    	add_action('mappress_map_display', 'my_mappress_translate_poi_fields');
    	function my_mappress_translate_poi_fields($map) {
    
    		$fields = array('address','title','name','body');
    		if (empty($map->mapid) || empty($map->pois) || !is_array($map->pois))
    			return;
    
    		foreach ($map->pois as $i => $poi) {
    			foreach ($fields as $field) {
    				if (isset($poi->$field) && $poi->$field !== '') {
    					$key = "map_{$map->mapid}_poi_{$i}_{$field}";
    					$translated = apply_filters('wpml_translate_single_string', $poi->$field, 'mappress', $key);
    					$poi->$field = $translated;
    				}
    			}
    		}
    	}
    	
    }
            


  • 在“MapPress > Maps”中重新保存您的地图。

  • 前往“WPML > 字符串翻译”,并翻译“mappress”域下的字符串

所有已知问题 →