我并不真正了解WPML及其处理翻译的最新情况,但我的一般理解是,在大多数情况下,它只是为每种语言创建重复条目,并将它们与“原始”链接在一起。
然而,我最近遇到了一个类似的问题,我需要能够添加术语名称的“复数”版本(而不是在默认字段中输入单数名称)。我通过抓住<taxonomy>_add_form_fields
, <taxonomy>_edit_form_fields
, edited_<taxonomy>
和create_<taxonomy>
.
解决方案#1-添加自定义分类字段
define(\'TERM_PLURAL_NAME_KEY\', \'term_name_plural\');
function setup_taxonomies() {
$taxonomy_name = \'my_tax\';
add_action( $taxonomy_name . \'_add_form_fields\', \'my_tax_add_plural_name_field\', 10, 2 );
add_action( $taxonomy_name . \'_edit_form_fields\', \'my_tax_edit_plural_name_field\', 10, 2 );
add_action( \'edited_\' . $taxonomy_name, \'save_my_tax_meta\', 10, 2 );
add_action( \'create_\' . $taxonomy_name, \'save_my_tax_meta\', 10, 2 );
}
add_action(\'init\', \'setup_plural_taxonomies\')
function my_tax_add_plural_name_field() {
?>
<div class="form-field">
<label for="term_meta[<?php echo TERM_PLURAL_NAME_KEY; ?>]"><?php _e( \'Plural name\', \'i18n_key\' ); ?></label>
<input type="text" name="term_meta[<?php echo TERM_PLURAL_NAME_KEY; ?>]" id="term_meta[<?php echo TERM_PLURAL_NAME_KEY; ?>]" value="">
<p class="description"><?php _e( \'A pluralized version of the term title, to be used when multiple objects are referred to.\', \'i18n_key\' ); ?></p>
</div>
<?php
}
function my_tax_edit_plural_name_field($term) {
$t_id = $term->term_id;
$term_meta = get_option( "taxonomy_$t_id" ); ?>
<tr class="form-field">
<th scope="row" valign="top"><label for="term_meta[<?php echo TERM_PLURAL_NAME_KEY; ?>]"><?php _e( \'Plural name\', \'i18n_key\' ); ?></label></th>
<td>
<input type="text" name="term_meta[<?php echo TERM_PLURAL_NAME_KEY; ?>]" id="term_meta[<?php echo TERM_PLURAL_NAME_KEY; ?>]" value="<?php echo esc_attr( $term_meta[TERM_PLURAL_NAME_KEY] ) ? esc_attr( $term_meta[TERM_PLURAL_NAME_KEY] ) : \'\'; ?>">
<p class="description"><?php _e( \'A pluralized version of the term title, to be used when multiple objects are referred to.\', \'i18n_key\' ); ?></p>
</td>
</tr>
<?php
}
function save_my_tax_meta($term_id) {
if ( isset( $_POST[\'term_meta\'] ) ) {
$t_id = $term_id;
$term_meta = get_option( "taxonomy_$t_id" );
$cat_keys = array_keys( $_POST[\'term_meta\'] );
foreach ( $cat_keys as $key ) {
if ( isset ( $_POST[\'term_meta\'][$key] ) ) {
$term_meta[$key] = $_POST[\'term_meta\'][$key];
}
}
update_option( "taxonomy_$t_id", $term_meta );
}
}
可以很容易地修改上述代码,以保存本地化字符串,而不是复数形式的名称。然后,您可以循环查看WPML中激活的语言列表,以及每种语言的a字段(您需要调整上面的所有函数)。如果您在WPML中启用了许多语言,并且很可能会使编辑器变得混乱,那么这可能是不切实际的。
这就是为什么我还可以想象另一种实现方式。。。
解决方案#2-将“本地化”术语和“默认语言”术语连接起来,不确定WPML是否会自动为您执行此操作,但若不能,您可以让它为每种语言创建本地化术语,并编写一个函数,在给定术语的情况下,返回该术语的本地化语言实例。然后,可以使用与上述示例相同的钩子创建此关系,但可以添加两个字段——第一个字段保存术语的默认语言版本(使用wp_dropdown_categories
) 另一个是持有本地化术语的语言。
正如我所说,我对WPML没有什么经验,可以想象这种类型的功能已经在插件本身中实现了,所以我建议在走这条路之前进行调查。