WooCommerce - 提交后检索选择框的正确数据值

Posted

技术标签:

【中文标题】WooCommerce - 提交后检索选择框的正确数据值【英文标题】:WooCommerce - Retrieving the correct data value for select box after submitting 【发布时间】:2017-01-22 23:11:03 【问题描述】:

我正在使用 Woocommerce,并且在管理面板中构建了一个选择框。我通过平面文件填充选择框中的信息。 一切正常(几乎)。

我坚持的部分是在我选择了我想要的“选择”并且保存之后我得到了数组 $key 位置而不是实际的 $value强>。我已经很接近了,但我就是拿不准。

更新:这是我的完整代码:

function woo_add_custom_admin_product_tab() 
?>
    <li class="custom_tab"><a href="#custom_tab_data"><?php _e('Additional Information', 'woocommerce'); ?></a></li>
<?php

add_action( 'woocommerce_product_write_panel_tabs', 'woo_add_custom_admin_product_tab' );


function woo_add_custom_admin_fields()     
    global $woocommerce, $post;

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

    // Select - Breed1
    if (file_exists ( plugin_dir_path(__FILE__) .'breed.txt')) 
        $breedData = file_get_contents ( plugin_dir_path(__FILE__) .'breed.txt');
        $breedArray = explode ("\n", $breedData);
    

    woocommerce_wp_select(array(
        'id'      => '_select_breed1',
        'label'   => __( 'Select Primary Breed', 'woocommerce' ),
        'desc_tip'    => 'true',
        'description' => __( 'Select the primary breed of the pet.', 'woocommerce' ),
        'options' => $breedArray
    ) );
    echo '</div>';
    echo '</div>';

add_action( 'woocommerce_product_write_panels', 'woo_add_custom_admin_fields' );


// Save Fields;
function woo_add_custom_general_fields_save( $post_id )
    // Text Field - Pet Name
    $woocommerce_text_field = $_POST['_pet_name'];
    if( !empty( $woocommerce_text_field ) )
       update_post_meta( $post_id, '_pet_name', esc_attr( $woocommerce_text_field ) );

    // Select Field - Breed
    $woocommerce_select = $_POST['_select_breed1'];
    if( !empty( $woocommerce_select ) )
        update_post_meta( $post_id, '_select_breed1', esc_attr( $woocommerce_select ) );

add_action( 'woocommerce_process_product_meta', 'woo_add_custom_general_fields_save' );

我的品种.txt 文件包含 3 行(项目):

Please Select a breed...
Abyssinian
Affenpinscher

而生成的数组是这样的:

Array ( 
    [0] => Please Select a breed... 
    [1] => Abyssinian 
    [2] => Affenpinscher 
)

例如,当我选择 "Affenpinscher" 时,我得到的值是 "2" 而不是 "Affenpinscher"

我做错了什么?我该如何解决这个问题?

谢谢

【问题讨论】:

您的数组与平面文件无关,请考虑重命名此问题。 【参考方案1】:

——更新——(测试和工作)

对于下拉选择器 &lt;select&gt;,这绝对是正常行为。你只需要在你的代码中添加一些小东西,让它以不同的方式工作。

变化是: — 首先,当外部文本文件中的值数组可用时,我将其存储在 wordpress 选项中。 — 其次,在最后一个保存函数中,我获取了存储的数组,并使用从 $_POST['_select_breed_key1']; 中获得的选定 key,检索了我得到的相应值存储在新条目中(wp_postmeta 表中的新行。

//Create the fields
function woo_add_custom_admin_fields()     
    global $woocommerce, $post;

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

    // Select - Breed1
    if (file_exists ( plugin_dir_path(__FILE__) .'breed.txt')) 
        $breedData = file_get_contents ( plugin_dir_path(__FILE__) .'breed.txt');
        $breedArray = explode ("\n", $breedData);

        //Storing the array in wp_options table
        if( get_option( 'wc_product_add_info_tab' ) )
            update_option( 'wc_product_add_info_tab', $breedArray );
        else
            add_option( 'wc_product_add_info_tab', $breedArray );
    

    woocommerce_wp_select( array(
        'id'      => '_select_breed_key1',
        'label'   => __( 'Select Primary Breed', 'woocommerce' ),
        'desc_tip'    => 'true',
        'description' => __( 'Select the primary breed of the pet.', 'woocommerce' ),
        'options' => $breedArray
    ) );

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

add_action( 'woocommerce_product_write_panels', 'woo_add_custom_admin_fields' );


// Save Created Fields;
function woo_add_custom_general_fields_save( $post_id )

    // Select Field - Breed
    $wc_select = $_POST['_select_breed_key1'];
    if( !empty( $wc_select ) )
        update_post_meta( $post_id, '_select_breed_key1', esc_attr( $wc_select ) );

    // Saving the corresponding value (from "$wc_select" selected key) to database
    if(get_option('wc_product_add_info_tab')) 

        // Getting the array
        $breed_arr = get_option('wc_product_add_info_tab');

        // Saving the corresponding value
        update_post_meta( $post_id, '_select_breed_value1', $breed_arr[$wc_select] );
    

add_action( 'woocommerce_process_product_meta', 'woo_add_custom_general_fields_save' );

您现在在 wp_postmeta 表中有一个产品 ID (post_id)、2 个元键: - '_select_breed_key1' 存储所选密钥 - '_select_breed_value1' 存储对应的值

用法示例(获取此值):

<?php

// Third parameter is set to "true" as it is a string (Not an array) 
$breed_value1 = get_post_meta( $post_id, '_select_breed_value1', true );
echo $breed_value1;

?>

【讨论】:

非常感谢 Loic!看起来我正朝着正确的方向前进,我需要获取数组的 [$value]。不幸的是,它没有像我期望的那样工作。当我单击更新时,值不会保存到数据库中。仅供参考,我也在使用函数来完成此操作,这是我的完整代码: 呜呼!有效!我只需要进行一次更正...在 // Select Field - Breed 部分中,我只需将: if( !empty( $woocommerce_select ) ) 更新为 if( !empty( $wc_select ) ) 但除此之外它有效!我仍然要学习数组和选择框的特性。但是谢谢,它起作用了....我想我接下来会尝试从数据库中提取! 哦,是的,抱歉……重命名时忘记了这个。已更新。

以上是关于WooCommerce - 提交后检索选择框的正确数据值的主要内容,如果未能解决你的问题,请参考以下文章

layui表单如何提交下拉框的键值

当 WooCommerce 档案中的产品缺货时删除自定义数量字段

php选择框的session防止重复提交问题

表单提交后怎么样才能不清空文本框和下拉框的值呢?

单击提交按钮后无法重定向到其他页面

更新 WooCommerce 可变产品变化库存数量问题