Заполните поле woocommerce_wp_select из базы данных - PullRequest
0 голосов
/ 28 ноября 2018

, пожалуйста, помогите мне с этим .. Я пробовал слишком много разных вещей ... Я пытаюсь заполнить поле выбора 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, который, кажется, делает это более простым!).Для данных, которые я возвращаю, идентификатор не требуется, поэтому значение и текст раскрывающегося списка могут совпадать.

Ответы [ 2 ]

0 голосов
/ 29 ноября 2018
  1. Сначала вам нужно , чтобы быть уверенным в table_name, или заменить его на правильный слаг-столбец , чтобы запросить его из таблицы базы данных wp_lbc_prices.
  2. Вам необходимо заменить WPDB метод get_results() на get_col(), который запрашивает один столбец и дает массив изначально.
  3. Подготовьте массив для копирования значений в ключи, используяarray_combine()

Я дополнил ваш код подключенной функцией, которая добавляет пользовательскую вкладку продукта.

Ваш повторный код будет:

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

Itлучше работать сейчас.Но так как это пользовательская таблица базы данных, она не поддается тестированию.

0 голосов
/ 28 ноября 2018

Функция get_results возвращает массив с индексами, поэтому значения могут быть похожи на массив объектов, подобных этому array([0]=>object,[1]=>object) Не могли бы вы поделиться тем, что вы получаете в переменной $ array?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...