Php 用于下拉框的电子商务功能
我不是wordpress开发人员,我正在尝试在woocommerce的签出函数中加入一个小函数。我需要的是双重的。第一个是能够插入一个简单的函数,该函数允许在签出页面上设置一个下拉框。我确实找到了以下代码:Php 用于下拉框的电子商务功能,php,wordpress,woocommerce,Php,Wordpress,Woocommerce,我不是wordpress开发人员,我正在尝试在woocommerce的签出函数中加入一个小函数。我需要的是双重的。第一个是能够插入一个简单的函数,该函数允许在签出页面上设置一个下拉框。我确实找到了以下代码: add_action('woocommerce_after_order_notes', 'my_custom_checkout_field'); function my_custom_checkout_field( $checkout ) { echo '<div id="my_c
add_action('woocommerce_after_order_notes', 'my_custom_checkout_field');
function my_custom_checkout_field( $checkout ) {
echo '<div id="my_custom_checkout_field"><h2>'.__('Purchase Extra').'</h2>';
woocommerce_form_field( 'my_field_name', array(
'type' => 'text',
'class' => array('my-field-class form-row-wide'),
'label' => __('Fill in this field'),
'placeholder' => __('Enter something'),
), $checkout->get_value( 'my_field_name' ));
echo '</div>';
}
我不知道如何将两者合并在一起
签出成功后如何提取该选择
===========================================
我已经试过了新的代码,虽然一切看起来
正常工作-选择的值不正确
正在保存到数据库中。只是一片空白
这是我的更新代码
这是一个很好的模板供您使用。它还提供了一个“class”参数,允许您轻松设置样式
/**
* Add the field to the checkout
**/
add_action('woocommerce_after_order_notes', 'my_custom_checkout_field');
function my_custom_checkout_field( $checkout ) {
echo '<div id="my_custom_checkout_field"><h2>'.__('My Field').'</h2>';
woocommerce_form_field( 'my_field_name', array(
'type' => 'select',
'class' => array('my-field-class form-row-wide'),
'label' => __('Fill in this field'),
'placeholder' => __('Enter something'),
), $checkout->get_value( 'my_field_name' ));
echo '</div>';
}
现在验证新的自定义字段:
/**
* Process the checkout
**/
add_action('woocommerce_checkout_process', 'my_custom_checkout_field_process');
function my_custom_checkout_field_process() {
global $woocommerce;
// Check if set, if its not set add an error.
if (!$_POST['my_field_name'])
$woocommerce->add_error( __('Please enter something into this new shiny field.') );
}
现在将新字段保存到订单自定义字段:
/**
* Update the order meta with field value
**/
add_action('woocommerce_checkout_update_order_meta', 'my_custom_checkout_field_update_order_meta');
function my_custom_checkout_field_update_order_meta( $order_id ) {
if ($_POST['my_field_name']) update_post_meta( $order_id, 'My Field', esc_attr($_POST['my_field_name']));
}
是的,这将与其他订单信息一起添加到数据库中。我认为这将解决您关于提取的问题:
/**
* Display field value on the order edition page
**/
add_action( 'woocommerce_admin_order_data_after_billing_address', 'my_custom_checkout_field_display_admin_order_meta', 10, 1 );
function my_custom_checkout_field_display_admin_order_meta($order){
echo '<p><strong>'.__('My Field').':</strong> ' . $order->order_custom_fields['My Field'][0] . '</p>';
}
这将在管理订单版本页面上添加/显示新字段 科乔莫乔,现在我有个问题要问你。这些信息现在会存储在数据库中吗?如果是这样的话,在交易成功后,我如何提取数据?@MrTechie我对答案做了很多修改。我不知道idk是如何实现的,很明显,您希望添加一个特殊的自定义字段,而不是覆盖现有字段。所以我适当地处理了你的情况。我还添加了如何从数据库cojomojo中提取新字段——我已经用现有代码更新了上面的帖子。它仍然没有输入下拉列表的值,而其他一切似乎都正常工作。少了什么?@Techie先生对不起,我一直在afk。您的意思是数据库中缺少下拉列表的值吗?通过下拉列表的值,您是指客户选择了什么?或者选项?您是否使用此方法获得要显示在订单中的值?
/**
* Process the checkout
**/
add_action('woocommerce_checkout_process', 'my_custom_checkout_field_process');
function my_custom_checkout_field_process() {
global $woocommerce;
// Check if set, if its not set add an error.
if (!$_POST['my_field_name'])
$woocommerce->add_error( __('Please enter something into this new shiny field.') );
}
/**
* Update the order meta with field value
**/
add_action('woocommerce_checkout_update_order_meta', 'my_custom_checkout_field_update_order_meta');
function my_custom_checkout_field_update_order_meta( $order_id ) {
if ($_POST['my_field_name']) update_post_meta( $order_id, 'My Field', esc_attr($_POST['my_field_name']));
}
/**
* Display field value on the order edition page
**/
add_action( 'woocommerce_admin_order_data_after_billing_address', 'my_custom_checkout_field_display_admin_order_meta', 10, 1 );
function my_custom_checkout_field_display_admin_order_meta($order){
echo '<p><strong>'.__('My Field').':</strong> ' . $order->order_custom_fields['My Field'][0] . '</p>';
}