从数据库填充woocommerce_wp_select字段

时间:2018-11-28 18:00:11

标签: mysql wordpress select woocommerce

请帮助我。.我尝试了太多不同的事情... 我正在尝试使用数据库中的数据填充woocommerce选择字段。

// Add fields & settings to the custom product tab
$SQL = "SELECT DISTINCT table_name FROM wp_lbc_prices";
$array = $wpdb->get_results( $SQL, ARRAY_A);


add_action( 'woocommerce_product_data_panels', 
'wcpt_roller_blind_options_product_tab_content' );

function wcpt_roller_blind_options_product_tab_content() {

?><div id='roller_blind_options' class='panel woocommerce_options_panel'><?php
    ?><div class='options_group'><?php
        woocommerce_wp_select( array(
                'id'          => 'roller_blind_tables',
                'label'       => __( 'Price Tables', 'wcpt' ),
                'placeholder' => '',
                'desc_tip'    => 'true',
                'description' => __( 'Select Associated Price Table.', 'wcpt' ),
                'options' => $array
           ));

    ?></div>
</div><?php

当然,对数据库的查询有效,并且返回了结果...但是我不确定如何制作一个可接受的数组(我习惯于asp.net,这似乎使事情变得更加简单!) 。我返回的数据不需要ID,因此下拉列表的值和文本可以相同。

2 个答案:

答案 0 :(得分:0)

get_results函数返回一个带有索引的数组,因此值可以像这样的对象数组array([0]=>object,[1]=>object),请您分享在$ array变量中得到的内容吗?

答案 1 :(得分:0)

  1. 您首先需要确定table_name或将其替换为要从数据库表wp_lbc_prices中查询的正确列子段
  2. 您需要将WPDB的{​​{1}}方法get_results()替换为查询单个列并以本机方式提供数组的get_col()
  3. 准备数组以使用array_combine()
  4. 将值复制到键

我已经使用添加了自定义产品标签的挂钩函数完成了代码。

您重新访问的代码将是:

add_filter( 'woocommerce_product_data_tabs', 'add_roller_blind_product_data_tab' );
function add_roller_blind_product_data_tab( $tabs ) {
    $tabs['roller_blind'] = array(
        'label' => __( 'Roller blind', 'wcpt' ),
        'target' => 'roller_blind_options', // <== to be used in the <div> class of the content
        //'class' => array('show_if_simple'), // or 'hide_if_simple' or 'show_if_variable'…
    );

    return $tabs;
}

add_action( 'woocommerce_product_data_panels', 'display_roller_blind_product_data_tab_content' );
function display_roller_blind_product_data_tab_content() {
    global $wpdb;

    echo '<div id="roller_blind_options" class="panel woocommerce_options_panel">
    <div class="options_group">';

    $sql_query = $wpdb->get_col( "SELECT DISTINCT table_name FROM {$wpdb->prefix}wp_lbc_prices" );
    $options   = sizeof($sql_query) > 0 ? array_combine( $sql_query, $sql_query ) : array();

    woocommerce_wp_select( array(
        'id'          => 'roller_blind_tables',
        'label'       => __( 'Price Tables', 'wcpt' ),
        'placeholder' => '',
        'desc_tip'    => 'true',
        'description' => __( 'Select Associated Price Table.', 'wcpt' ),
        'options'     => $options
    ));

    echo '</div></div>';
}

现在应该更好地工作。但这是自定义数据库表,因此无法测试。