gpt4 book ai didi

php - 下拉框的 WooCommerce 功能

转载 作者:行者123 更新时间:2023-12-02 17:39:14 35 4
gpt4 key购买 nike

我不是 wordpress 开发人员,我正在尝试在 woocommerce 结账功能上加入一个小功能。我需要的是两倍。第一个是允许在结帐页面上使用下拉框的简单功能。我确实设法找到了这段代码:

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>';

}

woocommerces 文档说您可以像这样添加下拉列表:

$fields['billing']['your_field']['options'] = array(
'option_1' => 'Option 1 text',
'option_2' => 'Option 2 text'
);

我不知道如何将两者合并在一起。

如何在结帐成功后提取该选择?

===========================================我已经尝试了新代码,虽然一切似乎工作正常 - 选择的值(value)不是被保存到数据库中。它只是空白。

这是我的更新代码

 add_action('woocommerce_before_order_notes', 'my_custom_checkout_field');

function my_custom_checkout_field( $checkout ) {

echo '<div id="my_custom_checkout_field"><h2>'.__('Purchase Domain').'</h2>';

woocommerce_form_field( 'do_domain', array(
'type' => 'select',
'class' => array('chzn-drop'),
'label' => __('Purchase from KitKamp?'),
'placeholder' => __('Enter something'),
'options' => array(
'subdomain' => __('No Thank You', 'woocommerce' ),
'domain' => __('Yes Please', 'woocommerce' )
)
),

$checkout->get_value( 'do_domain' ));

echo '</div>';

}


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['do_domain'])
$woocommerce->add_error( __('Please select your domain type.') );
}




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['do_domain']) update_post_meta( $order_id, 'do_domain', esc_attr($_POST['do_domain']));
}


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>'.__('Domain Purchase').':</strong> ' . $order->order_custom_fields['do_domain'][0] . '</p>';
}

最佳答案

这是一个很好的模板供您使用。它还提供了一个“类”参数,可让您轻松设置样式。

/**
* 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>';

}

现在这是添加下拉

function custom_override_checkout_fields( $fields ) {
$fields['my_custom_checkout_field']['options'] = array(
'label' => __('Options', 'woocommerce'),
'placeholder' => _x('', 'placeholder', 'woocommerce'),
'required' => false,
'clear' => false,
'type' => 'select',
'class' => array('own-css-name'),
'options' => array(
'option_a' => __('option a', 'woocommerce' ),
'option_b' => __('option b', 'woocommerce' )
)
);

}

现在验证新的自定义字段:

/**
* 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>';
}

这将在管理订单编辑页面上添加/显示新字段。

关于php - 下拉框的 WooCommerce 功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22826098/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com