WooCommerce:为购物车中的每个商品添加输入字段

Nix*_*Nix 24 wordpress woocommerce

我一直在尝试将单个文本输入字段添加到购物车中的每个项目,并将该用户输入提交到产品的元信息.已经2天了,我还没有成功.

我的目标是:

  1. 从用户那里获取添加到购物车的每个项目的输入.
  2. 在订单的元信息中显示输入.
  3. 显示发送给客户的确认电子邮件中的输入.

到目前为止,我已将模板文件复制到我的主题并在单元格中添加了一个输入字段.我遇到了钩子的麻烦,从WooCommerce Product Gift Wrap插件中了解到需要的钩子,正如这个woocommerce问题所示.

代码我添加到我的主题目录中复制的cart.php模板:

$input_url_data = '<div class="input-url"><input type="text" name="cart-url" value="" title="" class="input-text cart-url text" /></div>';

echo apply_filters( 'woocommerce_add_cart_item_data', $input_url_data, $cart_item_key );
Run Code Online (Sandbox Code Playgroud)

代码我添加到我的主题的functions.php:

add_filter( 'woocommerce_add_cart_item_data','add_cart_item_data', 10, 2 );
add_filter( 'woocommerce_get_cart_item_from_session','get_cart_item_from_session', 10, 2 );
add_filter( 'woocommerce_get_item_data','get_item_data', 10, 2 );
add_filter( 'woocommerce_add_cart_item','add_cart_item', 10, 1 );
add_action( 'woocommerce_add_order_item_meta','add_order_item_meta', 10, 2 );

function add_cart_item_data( $cart_item_meta, $product_id ) {
    $input_url_key = "";
    $input_url_data['inputurl'] = $input_url_key;
    return $input_url_data;
}

function get_cart_item_from_session( $cart_item, $values ) {

if ( ! empty( $values['inputurl'] ) ) {
    $cart_item['inputurl'] = true;
}
return $cart_item;
}

function get_item_data( $item_data, $cart_item ) {

if ( ! empty( $cart_item['inputurl'] ) )
    $item_data[] = array(
    );
return $item_data;
}

function add_cart_item( $cart_item ) {
if ( ! empty( $cart_item['inputurl'] ) ) {

}
return $cart_item;
}

function add_order_item_meta( $item_id, $cart_item ) {
if ( ! empty( $cart_item['inputurl'] ) )
woocommerce_add_order_item_meta( $item_id, __( 'URL by buyer', 'custom_input_url' ), __( 'Yes', 'custom_input_url' ) );
}
Run Code Online (Sandbox Code Playgroud)

关于hook woocommerce_add_cart_item_data的文档不是很有用,我对此感到困惑.我该怎么办?

Sar*_*ark 22

有一个名为WC Fields Factory的wordpress插件,用于确切的目的.

您也可以通过以下woocommerce挂钩做到这一点woocommerce_before_add_to_cart_button,woocommerce_add_to_cart,woocommerce_cart_item_name,和'woocommerce_add_order_item_meta'

比如将文本字段添加到产品页面

function add_name_on_tshirt_field() {
  echo '<table class="variations" cellspacing="0">
      <tbody>
          <tr>
          <td class="label"><label for="color">Name On T-Shirt</label></td>
          <td class="value">
              <input type="text" name="name-on-tshirt" value="" />
          </td>
      </tr>                             
      </tbody>
  </table>';
}
add_action( 'woocommerce_before_add_to_cart_button', 'add_name_on_tshirt_field' );
Run Code Online (Sandbox Code Playgroud)

要在购物车项目表上显示自定义字段,请使用以下内容

function render_meta_on_cart_item( $title = null, $cart_item = null, $cart_item_key = null ) {
    if( $cart_item_key && is_cart() ) {
        echo $title. '<dl class="">
                 <dt class="">Name On T-Shirt : </dt>
                 <dd class=""><p>'. WC()->session->get( $cart_item_key.'_name_on_tshirt') .'</p></dd>           
              </dl>';
    }else {
        echo $title;
    }
}
add_filter( 'woocommerce_cart_item_name', 'render_meta_on_cart_item', 1, 3 );
Run Code Online (Sandbox Code Playgroud)

要在您订购详细信息上制作自定义元数据,请执行以下操作

function tshirt_order_meta_handler( $item_id, $values, $cart_item_key ) {
    wc_add_order_item_meta( $item_id, "name_on_tshirt", WC()->session->get( $cart_item_key.'_name_on_tshirt') );    
}
add_action( 'woocommerce_add_order_item_meta', 'tshirt_order_meta_handler', 1, 3 );
Run Code Online (Sandbox Code Playgroud)

为了详细的实现,我有一篇关于如何在不使用任何插件的情况下执行此操作的文章.http://sarkware.com/how-to-pass-custom-data-to-cart-line-item-in-woocommerce-without-using-plugins/


Vis*_*isA 7

这很简单.尝试搜索和阅读Woocommerce的代码.

这么多代码让我指出了我可以添加Url @ Cart的地方.我可以在订单审核中看到它作为客户和管理员.

我无法测试电子邮件,因为我很懒.对不起.

像这样的东西在templates\cart\cart.php中(需要更多的代码,因为它是单独的列)

<td class="product-url">
    <?php
        $html = sprintf( '<div class="url"><input type="text" name="cart[%s][url]" value="%s" size="4" title="Url" class="input-text url text" /></div>', $cart_item_key, esc_attr( $values['url'] ) );
        echo $html;
    ?>
</td>
Run Code Online (Sandbox Code Playgroud)

的functions.php

// get from session your URL variable and add it to item
add_filter('woocommerce_get_cart_item_from_session', 'cart_item_from_session', 99, 3);
function cart_item_from_session( $data, $values, $key ) {
    $data['url'] = isset( $values['url'] ) ? $values['url'] : '';
    return $data;
}

// this one does the same as woocommerce_update_cart_action() in plugins\woocommerce\woocommerce-functions.php
// but with your URL variable
// this might not be the best way but it works
add_action( 'init', 'update_cart_action', 9);
function update_cart_action() {
    global $woocommerce;
    if ( ( ! empty( $_POST['update_cart'] ) || ! empty( $_POST['proceed'] ) ) && $woocommerce->verify_nonce('cart')) {
        $cart_totals = isset( $_POST['cart'] ) ? $_POST['cart'] : '';
        if ( sizeof( $woocommerce->cart->get_cart() ) > 0 ) {
            foreach ( $woocommerce->cart->get_cart() as $cart_item_key => $values ) {
                if ( isset( $cart_totals[ $cart_item_key ]['url'] ) ) {
                    $woocommerce->cart->cart_contents[ $cart_item_key ]['url'] = $cart_totals[ $cart_item_key ]['url'];
                }
            }
        }
    }
}

// this is in Order summary. It show Url variable under product name. Same place where Variations are shown.
add_filter( 'woocommerce_get_item_data', 'item_data', 10, 2 );
function item_data( $data, $cart_item ) {
    if ( isset( $cart_item['url'] ) ) {
        $data['url'] = array('name' => 'Url', 'value' => $cart_item['url']);
    }
    return $data;
}

// this adds Url as meta in Order for item
add_action ('woocommerce_add_order_item_meta', 'add_item_meta', 10, 2);
function add_item_meta( $item_id, $values ) {
    woocommerce_add_order_item_meta( $item_id, 'Url', $values['url'] );
}
Run Code Online (Sandbox Code Playgroud)

400 $是个不错的价格.


Ian*_*Ian 0

您可以使用Woocommerce 产品附加组件插件相当轻松地完成此操作

来自 WooThemes 网站:

允许您的客户通过添加新选项(例如输入框、下拉列表或复选框)来自定义您的产品。通过产品附加扩展,礼品信息、捐赠、激光雕刻和任何其他可能需要用户以某种方式输入的产品现在都可以为您的客户提供选择!

产品附加组件支持必填字段、文本区域、复选框、单选按钮、选择框、自定义价格输入和文件上传框。

我之前曾使用它为产品购买添加额外的捐赠字段,并将其显示在感谢页面/收据电子邮件上。

它的价格约为 50 美元,可以让您立即启动并运行,添加文本输入并按照您想要的方式在感谢页面/电子邮件上显示该字段。50 美元绝对值得您节省干燥时间来自己开发此功能。

以下是从最终用户角度来看的流程:

最终用户输入字段数据并将产品添加到购物车 最终用户输入字段数据并将产品添加到购物车

当用户查看购物车时,他们输入自定义字段的数据会与产品一起显示 当用户查看购物车时,他们输入自定义字段的数据会与产品一起显示

购买后,最终用户登录感谢页面并收到收据电子邮件,其中包含产品项目中包含的字段数据。 购买后,最终用户登录感谢页面并收到收据电子邮件,其中包含产品项目中包含的字段数据。

在后端:

为每个产品创建自定义字段。该选项位于“附加组件”菜单选项卡上。

  1. 创建一个新的插件组
  2. 输入群组名称(以便于组织)
  3. 添加新选项并输入标签(这是最终用户看到的并与产品相关的内容)
  4. 更新/发布产品。

为每个产品创建自定义字段

对于已完成的订单,您将在订单详细信息管理中看到以下内容:

产品订单详情页面还显示该字段

希望这对您有所帮助并节省您大量的开发时间!