首页 > 解决方案 > Woocommerce 如何在结帐页面上从数据库中创建和填充自定义下拉列表

问题描述

donate_section我在发送表格之前添加了带有名称的新部分,checkout page并在其中添加了 Select Drop-down name _done_select

我需要从数据库中填充它。

我正在使用以下查询,但仍然无法从数据库函数中获取数据:

donate_section_donate_dropdown( $fields ) {
    
    global $wpdb;
    $ngos = $wpdb->get_results("SELECT * FROM wp_wc_temp_ngo");
    
    $output = array();
    
    $output[0] = "-----------------------";
    
    foreach( $ngos as $key => $row) {
        $output[$row->id] = $row->firstname;
    }
    
    $shipping_address1_args = wp_parse_args( array(
        'type'       => 'select',
        'options'    => $output,
    ), $fields['donate_section']['_donate_dropdown'] );
    $fields['donate_section']['_donate_dropdown'] = $shipping_address1_args;
    //$fields['shipping']['shipping_first_name']['default'] = 'aaa';
    return $fields;
}
add_filter( 'woocommerce_checkout_fields', 'donate_section_donate_dropdown' );

标签: wordpresswoocommercedropdownhook-woocommercewoocommerce-theming

解决方案


好的!您的代码中有几点!

首先,我会给woocommerce_checkout_fields过滤器钩子一个priority。像这样:

add_filter( 'woocommerce_checkout_fields', 'donate_section_donate_dropdown', 20 );

然后下一点是你的foreach循环!使用以下foreach循环更改它:

foreach ($ngos as $row) {
    $output[$row->id] = $row->firstname;
  };

最后一点是构建下拉菜单的方式:

$fields['shipping']['_donate_dropdown'] = array(
    'type' => 'select',
    'label' => 'Donations',
    'priority' => 25 # use this number to move your drop-down, up and down the list of fields
  );

 $fields['shipping']['_donate_dropdown']['options'] = $output;

所以你的最终脚本functions.php是这样的:

add_filter( 'woocommerce_checkout_fields', 'donate_section_donate_dropdown', 20);

donate_section_donate_dropdown( $fields ) {
    
    global $wpdb;

    $ngos = $wpdb->get_results("SELECT * FROM wp_wc_temp_ngo");
    
    $output = array();
    
    $output[0] = "-----------Select a donation option-----------";
    
    foreach( $ngos as $row) {
        $output[$row->id] = $row->firstname;
    }
    
    $fields['shipping']['_donate_dropdown'] = array(
    'type' => 'select',
    'label' => 'Donations',
    'priority' => 25 # use this number to move your drop-down up and down the list of fields
  );

    $fields['shipping']['_donate_dropdown']['options'] = $output;

    return $fields;
}

希望这会为您节省一些时间和挫折!我刚刚在我自己的 woocommerce 安装上对其进行了测试,它工作正常!


推荐阅读