【问题标题】:Add and save a text field in WooCommerce customer order detail pages在 WooCommerce 客户订单详细信息页面中添加并保存文本字段
【发布时间】:2020-07-07 14:16:20
【问题描述】:

我已经能够在 woocommerce 的订单详情页面中添加自定义文本输入字段,但我无法保存数据提交的数据。

这是代码:

add_action( 'woocommerce_order_details_before_order_table', 'add_custom_Field',10,2 );
function add_custom_Field( $order_id) {
    $user = wp_get_current_user();
    $order_id = method_exists( $order, 'get_id' ) ? $order->get_id() : $order->id;
    ?>
<form method="post">
     <p class="woocommerce-form-row woocommerce-form-row--wide form-row form-row-wide">
        <label for="custom_URL"><?php _e( 'URL', 'woocommerce' ); ?></label>
        <input type="text" name="custom_URL" id="custom_URL" value="<?php echo esc_attr( $order_id->custom_URL ); ?>" />
    </p>
        <input type="submit" name="test" id="test" value="RUN" /><br/>
</form>
<?php

function submit()
{
    update_user_meta( $user_id, 'custom_URL', sanitize_text_field( $_POST['custom_URL'] ) );
    echo "Your function on button click is working";
}

   if(array_key_exists('test',$_POST)){
       submit();
    }
}   

你知道我做错了什么吗?

【问题讨论】:

    标签: php wordpress woocommerce hook-woocommerce orders


    【解决方案1】:

    以下将允许您将用户自定义字段添加到客户订单详细信息并在提交时保存其值:

    // Display user custom field
    add_action( 'woocommerce_order_details_before_order_table', 'add_user_custom_url_field_to_order' );
    function add_user_custom_url_field_to_order( $order ) {
        global $current_user;
    
        $custom_url = get_user_meta( $current_user->ID, 'custom_URL', true );
        ?>
        <form method="post">
             <p class="woocommerce-form-row woocommerce-form-row--wide form-row form-row-wide">
                <label for="custom_URL"><?php _e( 'URL', 'woocommerce' ); ?></label>
                <input type="text" name="custom_URL" id="custom_URL" value="<?php echo $custom_url; ?>" />
            </p>
            <input type="submit" name="submit-custom_URL" value="<?php _e('RUN', 'woocommerce'); ?>" /><br/>
        </form>
        <?php
    }
    
    // Save the field as custom user data
    add_action( 'template_redirect', 'save_user_custom_url_field_from_order' );
    function save_user_custom_url_field_from_order() {
        global $current_user;
    
        if( isset($_POST['custom_URL']) ){
            update_user_meta( $current_user->ID, 'custom_URL', sanitize_url( $_POST['custom_URL'] ) );
            wc_add_notice( __("Submitted data has been saved", "woocommerce") );
        }
    }
    

    代码在您的活动子主题(或活动主题)的functions.php 文件中。经过测试并且可以工作。


    基于您的评论的注释:

    如果每个订单的自定义 url 必须不同,则不能将其保存为用户元数据,而是保存为 $order item 元数据...但是代码会略有不同,您需要定义您的自定义网址将如何。

    【讨论】:

    • 非常感谢,但我认为我没有很好地解释我的需求。自定义 url 必须与订单 ID 相关(例如 100 个订单,100 个不同的自定义 url)。现在自定义 url 与用户 ID 相关。再次非常感谢! (你救了我的命!)
    • 嗨,我听从了你的建议,刚刚发布了另一个帖子。如果你能帮助我:stackoverflow.com/questions/62779061/… 再次感谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-12-28
    • 1970-01-01
    • 2015-01-28
    • 2015-12-10
    • 1970-01-01
    • 2019-03-17
    • 1970-01-01
    相关资源
    最近更新 更多