来自产品属性条款的{woocommerce_wp_select选项数组

时间:2017-08-28 02:43:16

标签: php wordpress woocommerce attributes product

我正在尝试在woocommerce中创建一个下拉列表框,但是用数据库中的数据填充它。

我有大部分代码正在运行,但填充列表框的部分正在扼杀我。这是我到目前为止所做的。

add_action( 'woocommerce_product_options_general_product_data', 'woo_add_custom_general_fields' ); // Display Extra Fields on General Tab Section


add_action( 'woocommerce_process_product_meta', 'woo_add_custom_general_fields_save' ); // Save Fields

function woo_add_custom_general_fields() {
    global $woocommerce, $post, $product;
    echo '<div class="options_group">';

    // Select

    $options = array(
        'hide_empty' => false,
        'order' => 'ASC',
        'fields' => 'names'
        );
    $DogBreeds = get_terms('pa_breed', $options);

    foreach ($DogBreeds as $key => $value) {
        $theArray = "'{$value}'  => __( '{$value}' , 'woocommerce' ), ";
    }

    woocommerce_wp_select( 
        array( 
            'id'      => '_select', 
            'label'   => __( 'My Select Field', 'woocommerce' ),
            'options' =>  $theArray //this is where I am having trouble
            )
        );

        echo $theArray;
        echo '<pre>';
        var_dump($DogBreeds);
        echo '</pre>';

    echo '</div>';
}

// Save Fields
    function woo_add_custom_general_fields_save( $post_id ){

    // Select
        $woocommerce_select = $_POST['_select'];
        if( !empty( $woocommerce_select ) )
            update_post_meta( $post_id, '_select', esc_attr( $woocommerce_select ) );
        else {
            update_post_meta( $post_id, '_select',  Null );
        }
    }

这应该从WooCommerce的“ATTRIBUTES”部分提取信息。我创建了一个品种属性并在那里放了几个狗品种。

非常感谢任何方向!

我知道阵列上的“选项”部分是完全错误的,但我把它放在那里让你知道我想要完成的任务。

1 个答案:

答案 0 :(得分:4)

我稍微重新审视了你的代码。主要问题在于select <option>数组。

您将在代码中看到更改:

// Display Extra Fields on General Tab Section
add_action( 'woocommerce_product_options_general_product_data', 'woo_add_custom_general_fields' );
function woo_add_custom_general_fields() {
    global $post;

    // Set HERE the product attribute taxonomy
    $taxonomy = 'pa_breed';

    // Get the selected value  <== <== (updated)
    $value = get_post_meta( $post->ID, '_select', true );
    if( empty( $value ) ) $value = '';

    $dog_breeds = get_terms( $taxonomy, array(
        'hide_empty' => false,
        'order' => 'ASC',
        'fields' => 'names'
    ) );

    $options[''] = __( 'Select a value', 'woocommerce'); // default value

    foreach ($dog_breeds as $key => $term)
        $options[$term] = $term; //  <===  <===  <===  Here the correct array

    echo '<div class="options_group">';

    woocommerce_wp_select( array(
        'id'      => '_select',
        'label'   => __( 'My Select Field', 'woocommerce' ),
        'options' =>  $options, //this is where I am having trouble
        'value'   => $value,
    ) );

    echo '</div>';
}

// Save Fields
add_action( 'woocommerce_process_product_meta', 'woo_add_custom_general_fields_save' );
function woo_add_custom_general_fields_save( $post_id ){

// Select
    $woocommerce_select = $_POST['_select'];
    if( !empty( $woocommerce_select ) )
        update_post_meta( $post_id, '_select', esc_attr( $woocommerce_select ) );
    else {
        update_post_meta( $post_id, '_select',  '' );
    }
}

代码放在活动子主题(或主题)的function.php文件中,或者放在任何插件文件中。

在WooCommerce 3+中测试并且有效。您将获得与此(与您的品种)相似的内容

enter image description here