【问题标题】:Adding a hidden checkout field in WooCommerce?在 WooCommerce 中添加隐藏的结帐字段?
【发布时间】:2017-07-25 12:19:09
【问题描述】:

我想包含指向通过 WooCommerce 提交结帐表单的当前用户的个人资料的链接。

也就是说,自动将当前用户的作者链接放置在隐藏字段中:example.com/author/username

我想通过在结帐表单中添加一个隐藏字段来实现这一点。所以要得到一个链接,我会写这样的东西:

<?php

$currentUser = get_current_user_id();

$user = get_user_by( 'id', $currentUser );

$userUrl = get_bloginfo( 'home' ) . '/author/' . $user->user_login;

echo $userUrl;
?>

我的问题是如何在结帐表单中创建这种类型的隐藏字段?

【问题讨论】:

    标签: php wordpress woocommerce checkout hook-woocommerce


    【解决方案1】:

    将此添加到您的functions.php文件(或插件文件等)中

    add_action( 'woocommerce_after_order_notes', 'hidden_author_field' );
    
    function hidden_author_field( $checkout ) {
    
    $currentUser = get_current_user_id();
    $user = get_user_by( 'id', $currentUser );
    $userUrl = get_bloginfo('home').'/author/'.$user->user_login;
    
        woocommerce_form_field( 'hidden_author', array(
            'type'          => 'hidden',
            'class'         => array('hidden form-row-wide'),
            ), $userUrl);
    
    }
    

    此代码未经测试,更多内容请阅读此处https://docs.woocommerce.com/document/tutorial-customising-checkout-fields-using-actions-and-filters/ 和此处http://woocommerce.wp-a2z.org/oik_api/woocommerce_form_field/。请让我知道这是否对您有用,如果不是问题是什么。

    【讨论】:

    【解决方案2】:

    通过woocommerce_after_order_notes动作钩子钩住自定义函数,也可以直接输出一个隐藏字段,该用户“作者链接”作为隐藏值,同时提交客户下订单时包含所有结帐字段。

    代码如下:

    add_action( 'woocommerce_after_order_notes', 'my_custom_checkout_hidden_field', 10, 1 );
    function my_custom_checkout_hidden_field( $checkout ) {
    
        // Get an instance of the current user object
        $user = wp_get_current_user();
    
        // The user link
        $user_link = home_url( '/author/' . $user->user_login );
    
        // Output the hidden link
        echo '<div id="user_link_hidden_checkout_field">
                <input type="hidden" class="input-hidden" name="user_link" id="user_link" value="' . $user_link . '">
        </div>';
    }
    

    然后你需要按顺序保存这个隐藏字段,这样:

    add_action( 'woocommerce_checkout_update_order_meta', 'save_custom_checkout_hidden_field', 10, 1 );
    function save_custom_checkout_hidden_field( $order_id ) {
    
        if ( ! empty( $_POST['user_link'] ) )
            update_post_meta( $order_id, '_user_link', sanitize_text_field( $_POST['user_link'] ) );
    
    }
    

    代码进入您的活动子主题(或主题)的 function.php 文件或任何插件文件中。

    代码已经过测试并且可以运行

    【讨论】:

    • 嗨,谢谢。您知道如何在订单页面和订单电子邮件中显示此作者链接吗?
    • 如果有人需要,我想出了如何在订单电子邮件中放置作者链接:add_filter( 'woocommerce_email_order_meta_fields', 'custom_woocommerce_email_order_meta_fields', 10, 3 ); function custom_woocommerce_email_order_meta_fields( $fields, $sent_to_admin, $order ) { $fields['_user_link'] = array( 'label' =&gt; __( 'User Link' ), 'value' =&gt; get_post_meta( $order-&gt;id, '_user_link', true ), ); return $fields; }
    • 问题:为什么将隐藏的输入包装在
      中?
    猜你喜欢
    • 2015-07-09
    • 1970-01-01
    • 2018-07-05
    • 2018-03-25
    • 1970-01-01
    • 1970-01-01
    • 2020-02-09
    • 2019-01-21
    • 1970-01-01
    相关资源
    最近更新 更多