如何在自定义 woocommerce 结帐字段中显示 $_SESSION 变量?

Posted

技术标签:

【中文标题】如何在自定义 woocommerce 结帐字段中显示 $_SESSION 变量?【英文标题】:How to display a $_SESSION variable in custom woocommerce checkout field? 【发布时间】:2021-07-08 21:26:39 【问题描述】:

我可以通过查看开发工具中的“应用程序”选项卡来验证我的会话变量是否已转移到结帐页面;我有 WC 挂钩设置,允许我更改要插入数据的字段的“默认”/值。

但是,我无法让他们互相阅读。

add_filter( 'woocommerce_checkout_fields' , 'custom_override_checkout_fields' );

function custom_override_checkout_fields( $fields ) 
     $fields['order']['order_comments']['label'] = "Custom Neon Details (If included)";
     $fields['order']['order_comments']['default'] = $_SESSION["customtext"];
     var_dump( $fields );
     return $fields;

正如您从所附图片中看到的那样,我的会话变量出现在该页面上。现在,如何让它将该会话变量添加到 $fields['order']['order_cmets']['default']?

感谢任何帮助!谢谢。

【问题讨论】:

【参考方案1】:

在访问$_SESSION 变量之前使用session_start();

add_filter( 'woocommerce_checkout_fields' , 'custom_override_checkout_fields' );
function custom_override_checkout_fields( $fields ) 

    session_start();

    $fields['order']['order_comments']['label'] = "Custom Neon Details (If included)";
    $fields['order']['order_comments']['default'] = $_SESSION["customtext"];
    var_dump( $fields );
    return $fields;

或者,您可以将 jQuery 与 sessionStorage 一起使用:

// set the value of the order comment field via session storage
add_action( 'wp_footer', 'set_value_order_comments_field_via_session_storage' );
function set_value_order_comments_field_via_session_storage() 
    ?>
    <script type="text/javascript">
        jQuery(function($)
            var customtext = sessionStorage.getItem("customtext");
            if ( customtext.length ) 
                $('#order_comments').val(customtext);
            
        );
    </script>
    <?php

代码已经过测试并且可以运行。将其添加到活动主题的 functions.php 中。

【讨论】:

谢谢!像魅力一样工作! :)

以上是关于如何在自定义 woocommerce 结帐字段中显示 $_SESSION 变量?的主要内容,如果未能解决你的问题,请参考以下文章

自定义 woocommerce 结帐表单字段

php [使用操作和过滤器自定义结帐字段]保存WooCommerce自定义结帐字段

php [使用操作和过滤器自定义结帐字段]验证WooCommerce自定义结帐字段

所有 WooCommerce 结帐字段的自定义占位符

WooCommerce 中的动态同步自定义结帐选择字段

从 CTP 添加自定义 WooCommerce 下拉结帐字段