Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/241.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 用于下拉框的电子商务功能_Php_Wordpress_Woocommerce - Fatal编程技术网

Php 用于下拉框的电子商务功能

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

我不是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>';

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

签出成功后如何提取该选择

=========================================== 我已经试过了新的代码,虽然一切看起来 正常工作-选择的值不正确 正在保存到数据库中。只是一片空白

这是我的更新代码


这是一个很好的模板供您使用。它还提供了一个“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>';
}