WordPress关于AJAX问题的GET_OPTION()

时间:2015-01-22 作者:Richard

我对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);
    }
    

  • 1 个回复
    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访问。。。我不确定我是否同意这一点,但至少现在我知道了。

    希望这能帮助其他人。

    结束

    相关推荐

    Options.php问题-数据未保存

    我创建了一个带有一些字段的自定义菜单页。我想存储这些设置以便在其他地方使用。带有字段的表单应使用action=\"options.php\" 但每次我在表单上点击save时,它都会将我发送回settings页面,而不会保存数据。我正在我的函数中注册设置。phpfunction register_settings() { register_setting(\'settings-group\',\'phonenumber\'); register_setti