Wordpress get_option() on AJAX issue



我在使用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 访问...我不确定我是否可以同意这一点,但至少现在我知道了。

希望这会帮助其他人。

最新更新