我对get_option
方法。
我正在运营一个WooCommerce网站currency symbol position
设置为“带空格的右侧”。在wp\\U选项表中option_name
“woocommerce\\u currency\\u pos”正确设置为“right\\u space”。
在普通网站上查看产品时,一切正常,货币代码显示在右侧,选项值恢复正确。
然而,问题是我们使用了一个小JS函数来显示购物车(mini_cart.php
) 在灯箱中,返回的代码在左侧显示货币代码。
经过一点调试,我找到了方法get_woocommerce_price_format
这里的第一行是:$currency_pos = get_option( \'woocommerce_currency_pos\' );
所以这只是一个默认函数,用于获取option_name
从选项表中。然而,在这个Ajax调用中,它返回“left”。
我搞不懂到底是怎么回事,它返回的值与数据库中的值不同。
明显的潜在问题:
Ajax调用了错误的域/网站-但这并没有发生,它位于同一个项目中,代码相同。对代码的更改反映了罚款(adie($currency_pos)
返回字符串)
它是从另一个数据库中提取的-项目只有1个,配置设置只有1组,因此几乎不可能从其他地方获取此数据(我只有一个WooCommerce项目)这个奇怪的问题是什么?p、 AJAX称为via/wp-admin/admin-ajax.php
这是完整的函数,它不是类或任何东西的一部分
/**
* Get the price format depending on the currency position
*
* @return string
*/
function get_woocommerce_price_format ()
{
$currency_pos = get_option(\'woocommerce_currency_pos\');
switch ($currency_pos) {
case \'left\' :
$format = \'%1$s%2$s\';
break;
case \'right\' :
$format = \'%2$s%1$s\';
break;
case \'left_space\' :
$format = \'%1$s %2$s\';
break;
case \'right_space\' :
$format = \'%2$s %1$s\';
break;
}
//$format = \'%2$s %1$s\';
return apply_filters(\'woocommerce_price_format\', $format, $currency_pos);
}
SO网友:Richard
好吧,对于任何将来可能需要这个的人。
Woocommerce覆盖get_option()
使用此行的方法:add_filter(\'option_woocommerce_currency_pos\', array($this, \'filter_currency_position_option\'));
然后调用filter_currency_position_option
此方法的前几行是:
function filter_currency_position_option($value){
global $pagenow;
if( ( is_ajax() || ( $pagenow == \'post-new.php\' && isset( $_GET[\'post_type\'] ) && $_GET[\'post_type\'] == \'shop_order\' ) ) && isset( $_COOKIE[ \'_wcml_order_currency\' ] ) ){
$currency_code = $_COOKIE[ \'_wcml_order_currency\' ];
W-T-F
好的,它将货币头寸存储在一个cookie中,用于AJAX访问。。。我不确定我是否同意这一点,但至少现在我知道了。
希望这能帮助其他人。