gpt4 book ai didi

php - 从自定义 WooCommerce 我的帐户选项卡保存表单数据

转载 作者:行者123 更新时间:2023-12-04 15:44:04 24 4
gpt4 key购买 nike

我在“我的帐户”中创建了一个新的“成员(member)详细信息”选项卡,并在该选项卡中填充了表单字段以收集成员(member)详细信息,例如兴趣爱好、生日等。这些详细信息随后会显示在“我的帐户”仪表板上。

如何保存在新“成员(member)详细信息”选项卡上提交的数据?

许多网站都有如何在新选项卡上显示信息的示例,但我找不到任何显示如何提交和保存表单数据的示例。

function add_custom_fields() {
$user = wp_get_current_user();
?>
<form id="edit_member_details" method="post">
<p class="woocommerce-form-row woocommerce-form-row--wide form-row form-row-wide">
<label for="member_hobbies"><?php _e( 'Member Hobbies', 'woocommerce' ); ?>
<input type="text" class="woocommerce-Input woocommerce-Input--text input-text" name="member_hobbies" id="member_hobbies" value="<?php echo esc_attr( $user->member_hobbies ); ?>" />
</p>
<p>
<button type="submit" class="button" name="save_member_details" value="<?php esc_attr_e( 'Save member details', 'woocommerce' ); ?>"><?php esc_html_e( 'Save member details', 'woocommerce' ); ?></button>
<input type="hidden" name="woocommerce_edit_member_details" value="save_member_details" />
</p>
</form>
<?php
}

add_action( 'woocommerce_save_account_details', 'save_member_details', 12, 1 );
function save_member_details( $user_id ) {
if( isset( $_POST['member_hobbies'] ) )
update_user_meta( $user_id, 'member_hobbies', sanitize_text_field( $_POST['member_hobbies'] ) );
}

最佳答案

Woocommerce 处理表单提交的方式是创建类,然后将这些类挂接到 wptemplate_redirect 操作中。您可以通过查看 WC_Form_Handler 亲自了解这一点。 .

根据您的方法,您可以遵循类似的策略并创建一个早期 Hook 的类或函数来处理您的表单数据。例如

add_action('wp', 'my_form_handler');
function my_form_handler() {
// read in my post data

// process my data.

// optionally redirect
}

您会在这里遇到的一个问题是,每次调用 wptemplate_redirect 时都会运行此 Hook ,这是每次页面加载。 Woocommerce 通过查找随机数、帖子字段和使用 is_* 函数来处理这个问题。我使用的一种策略是用

开始我的功能
if(filter_input(INPUT_SERVER, 'REQUEST_METHOD') !== 'POST') {
return;
}

如果我们没有在页面上检测到 POST 操作,这将导致函数退出。

如果您决定执行表单验证,如果您选择使用 wc_add_notice,您将遇到报告错误的问题,尤其是当您决定在表单处理后重定向时。如果您在使用 wc_add_notice 后进行重定向,您的通知将会丢失,因为通知不会在页面加载期间持续存在。

关于php - 从自定义 WooCommerce 我的帐户选项卡保存表单数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56652459/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com