我在使用Wordpress中的get_option
方法时遇到了一些问题。
我正在运行一个WooCommerce网站,currency symbol position
设置为"与空间有关"。在wp_options表中,option_name
"woocommerce_currency_pos"正确设置为"right_space"。
在普通网站上查看产品时,一切正常,货币代码显示在右侧,选项值返回正确。
然而,问题是我们使用一个小的JS函数在灯箱中显示购物车(mini_cart.php
),返回的代码在左侧显示货币代码。
经过一些调试,我找到了get_woocommerce_price_format
的方法,这里的第一行是:$currency_pos = get_option( 'woocommerce_currency_pos' );
因此,这只是从选项表中获取所述option_name
值的默认函数。但是,这会在此 Ajax 调用中返回"left"。
我不知道到底是怎么回事,这返回的值与数据库中的值不同。
明显的潜在问题:
- Ajax调用了错误的域/网站 - 但这并没有发生,它在同一个项目中,相同的代码中。对代码的更改反映良好(
die($currency_pos)
返回字符串) - 它从另一个数据库中提取 - 只有 1 个用于项目和 1 组配置设置,因此它几乎不可能从其他地方获取这些数据(我只有 1 个项目 WooCommerce)。
这个奇怪的问题会是什么?
附言AJAX通过/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);
}
好吧,对于将来可能需要这个的任何人。
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 访问...我不确定我是否可以同意这一点,但至少现在我知道了。
希望这会帮助其他人。