无法使用普通筛选器在WooCommerce中更改标签

时间:2013-10-31 作者:Lucky Luke

  // Hook in
  add_filter( \'woocommerce_checkout_fields\' , \'custom_override_checkout_fields\' );

// Our hooked in function - $fields is passed via the filter!
function custom_override_checkout_fields( $fields ) {
 $fields[\'order\'][\'order_comments\'][\'placeholder\'] = \'Special delivery requirements\';
 $fields[\'billing\'][\'billing_company\'][\'label\'] = \'Company name if applicable\';
 $fields[\'shipping\'][\'shipping_company\'][\'label\'] = \'Company name if applicable\';
 $fields[\'billing\'][\'billing_address_2\'][\'placeholder\'] = \'House number / name\';
 $fields[\'shipping\'][\'shipping_address_2\'][\'placeholder\'] = \'House number / name\';
 $fields[\'billing\'][\'billing_state\'][\'required\'] = true;
 $fields[\'billing\'][\'billing_state\'][\'label\'] = \'County <abbr class="required" title="required">*</abbr>\';
 return $fields;
}
我使用此代码更改了woocommerce结账表单的一些字段。

由于某些无法解释的原因,账单状态的标签拒绝更改。尽管计费公司的标签已成功更改,但计费状态的标签拒绝更改。它已成功成为必需,但我无法更改标签。

有没有人知道我做错了什么,或者这是否是一个bug。

2 个回复
最合适的回答,由SO网友:Nicolai Grossherr 整理而成

您必须使用woocommerce_default_address_fields 挂钩:

add_filter( \'woocommerce_default_address_fields\' , \'wpse_120741_wc_def_state_label\' );
function wpse_120741_wc_def_state_label( $address_fields ) {
     $address_fields[\'state\'][\'label\'] = \'County\';
     return $address_fields;
}
woocommerce文档对此(及更多)进行了描述:Customizing checkout fields using actions and filters, 所以下次彻底阅读你的材料……;)

编辑:上述代码并非适用于所有情况,因为在选择国家时,签出表单的状态字段会通过javascript更新。要使其正常工作,需要使用woocommerce_get_country_locale 像这样钩住:

add_filter(\'woocommerce_get_country_locale\', \'wpse_120741_wc_change_state_label_locale\');
function wpse_120741_wc_change_state_label_locale($locale){
    // uncomment /** like this /**/ to show the locales
    /**
    echo \'<pre>\';
    print_r($locale);
    echo \'</pre>\';
    /**/
    $locale[\'GB\'][\'state\'][\'label\'] = __(\'test\', \'woocommerce\');
    $locale[\'US\'][\'state\'][\'label\'] = __(\'anything\', \'woocommerce\');
    return $locale;
}
挂钩位于class-wc-countries.phpget_country_locale() 作用

SO网友:Sharif

我知道这是很久以前的事了,但我想在这篇文章中再加一点,如果只是为了让其他人免受我所经历的同样的挫折的话。

签出页面中的某些字段无论使用何种过滤器都不会更改这些字段是由于checkout.js 文件此文件从当前区域设置加载区域设置信息,并重置字段标签和占位符值。当试图将占位符“街道地址”更改为邮箱/街道地址时,这尤其令人沮丧

要更改这些字段,需要做的是在您的wp_config.php 文件格式如下:

define(\'WPLANG\', \'en_GB\');
然后下载插件“CodeStyleing本地化”

转到工具->本地化,向下滚动到woocommerce并重新扫描您的语言文件,在这种情况下,它将是英语/英国文件。

扫描完成后,单击编辑并搜索您的术语,在本例中为“街道地址”,并在我的案例中添加您的翻译,即“街道地址/邮政信箱”。

单击顶部的“生成mo文件”按钮,即可完成,有关如何执行此操作的完整说明如下:

http://docs.woothemes.com/document/woocommerce-localization/

结束

相关推荐

private functions in plugins

我开发了两个插件,其中一个功能相同(相同的名称,相同的功能)。当试图激活两个插件时,Wordpress会抛出一个错误,因为它不允许我以相同的名称定义函数两次。有没有一种方法可以使这个函数只对插件私有,而不使用面向对象编程,也不简单地重命名函数?我不想使用OOP,因为我首先要学习它。此外,我不想重命名该函数,因为我可能也想在其他插件中使用它,而重命名感觉不太合适。