php - 在 Woocommerce 订单页面中,创建与订单 ID 相关的自定义文本字段

标签 php wordpress woocommerce hook-woocommerce orders

this code这是我之前的一个问题的答案,自定义 url 数据与用户数据相关。

我需要自定义 URL 必须不同,与订单 ID 相关(例如 100 个订单,100 个不同的自定义 URL,每个订单页面一个)。

// 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']) && ! empty($_POST['custom_URL']) ){
        update_user_meta( $current_user->ID, 'custom_URL', sanitize_url( $_POST['custom_URL'] ) );
        wc_add_notice( __("Your custom URL has been saved saved", "woocommerce") );
    }
}

最佳答案

以下是将数据保存为订单自定义元数据而不是用户元数据的方法:

add_action( 'woocommerce_order_details_before_order_table', 'add_custom_url_field_to_order' );
function add_custom_url_field_to_order( $order ) {
    $custom_url = $order->get_meta( 'custom_URL' );
    ?>
    <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="hidden" name="the_order_id" value="<?php echo $order->get_id(); ?>" />
        <input type="submit" name="submit-custom_URL" value="<?php _e('RUN', 'woocommerce'); ?>" /><br/>
    </form>
    <?php
}

// Save the field
add_action( 'template_redirect', 'save_custom_url_field_from_order' );
function save_custom_url_field_from_order() {
    if( isset($_POST['custom_URL']) && ! empty($_POST['custom_URL']) && isset($_POST['the_order_id']) ){
        update_post_meta( esc_attr($_POST['the_order_id']), 'custom_URL', sanitize_url( $_POST['custom_URL'] ) );
        wc_add_notice( __("Submitted data has been saved", "woocommerce") );
    }
}

代码位于事件子主题(或事件主题)的functions.php 文件中。经过测试并有效。

现在每个自定义 URL 将与订单相关,但不再与用户元数据相关。

关于php - 在 Woocommerce 订单页面中,创建与订单 ID 相关的自定义文本字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62779061/

相关文章:

php - 在 WooCommerce 中应用优惠券时显示购物车商品折扣金额

php - 在 Zend_Form 中,如何避免 Zend_Validate_Email 产生多个错误?

javascript - eekTo() 不是函数 YouTube iframe API 错误

mysql - 尝试从外部脚本(同一服务器)连接到 WordPress 数据库时出现 500 内部服务器错误

wordpress - Woocommerce 2.6 API v1 -> 参数无效

payment-gateway - WooCommerce:根据选择的支付网关向卡中添加费用

php - 当购物车中没有商品时移除迷你购物车 (MayaShop)

javascript - 如何在点击字形图标时显示通知右上角几秒钟?

php exec()在unicode模式下?

php - 如何将 mysqli 结果转换为 JSON?