我有以下函数和处理配置文件表单的变量array.除了一个之外,所有的都是典型的输入,除了'member-comptency[]'.它是一个 Select 字段,有几个可能的值.现在,表单保存,所有数据都按预期完成,但该字段除外,它只返回一个数字,我假设它是HTMLvalue.再仔细看一下,元素的"值"也只是一个数字,这可能会使情况变得更糟.

我已经多次try 以不同的方式修改它,但都没有成功,但只产生了一个"不保存"的情况,或者进一步的非描述性错误.我知道这个字段本身就是一个数组,但我甚至不确定如何提出一个更好的问题来让我走上正轨.

该功能

function getUMFormData(){
    $id = um_user('ID');
        $names = array(
            'member-company',
            'member-phone',
            'member-website',
            'member-competency[]',
            'member-contact-billing-name'
        );

        foreach( $names as $name )
        update_user_meta( $id, $name, $_POST[$name] );
}

超文本标记语言元素

以下几种 Select 之一

<label class="um-field-radio  um-field-half  right ">
  <input type="radio" name="member-competency[]" value="1">

  <span class="um-field-radio-state">
    <i class="um-icon-android-radio-button-off"></i>
  </span>

  <span class="um-field-radio-option">Manufacturer</span>
</label>

想要的结果

我需要从最后<span>个元素(本例中为制造商)中获取单词,以保存到getUMFormData()函数中.

推荐答案

从您的HTML示例中,请注意"制造商"单选按钮的值为"1".

现在,在您的函数中,要使用的元密钥是'member-competency',不带[].

然后请注意,$_POST['member-competency']将给出一个类似array('1')的数组,因为来自输入单选按钮HTML的member-comptency[]属性名中有[].

如果从$_POST['member-competency']中得到array('1'),则选中的单选按钮是"制造商",您可以将"制造商"设置为元值.

因此您的功能将是:

function getUMFormData(){
    $user_id = um_user('ID');

    $fields  = array(
        'member-company',
        'member-phone',
        'member-website',
        'member-competency', // <== Removed "[]"
        'member-contact-billing-name'
    );

    foreach( $fields as $meta_key ) {
        if ( $user_id > 0 && isset($_POST[$meta_key]) ) {
            $meta_value = $_POST[$meta_key];
            // Targeting 'member-competency' field with "Manufacturer" label
            if ( $meta_key === 'member-competency' && is_array($meta_value) && current($meta_value) == '1' ) {
                update_user_meta( $user_id, $meta_key, __("Manufacturer") );
            } 
            // Other fields
            else {
                update_user_meta( $user_id, $meta_key, esc_attr($meta_value) );
            }
        }
    }      
}

应该能行得通.


Addition:

在单选按钮的HTML中,要将标签名称复制到输入属性"Value"中,您可以使用以下命令:

add_action('wp_footer', 'wp_footer_custom_script', 10);
function wp_footer_custom_script() {
    ?><script>
    jQuery(function($){
        $('[name^=member-competency]').each(function(){
            $(this).attr('value', $(this).parent().find('span.um-field-radio-option').text());
        });
    });
    </script><?php
}

然后,您的功能将略有变化:

function getUMFormData(){
    $user_id = um_user('ID');

    $fields  = array(
        'member-company',
        'member-phone',
        'member-website',
        'member-competency', // <== Removed "[]"
        'member-contact-billing-name'
    );

    foreach( $fields as $meta_key ) {
        if ( $user_id > 0 && isset($_POST[$meta_key]) ) {
            $meta_value = $_POST[$meta_key];
            // Targeting 'member-competency' field with "Manufacturer" label
            if ( $meta_key === 'member-competency' && is_array($meta_value) ) {
                update_user_meta( $user_id, $meta_key, esc_attr( current($meta_value) ) );
            } 
            // Other fields
            else {
                update_user_meta( $user_id, $meta_key, esc_attr($meta_value) );
            }
        }
    }      
}

它应该会起作用,解决你的担忧.

Php相关问答推荐

p a/a/p的x路径 Select ,但不是p somethext a链接/a或某些文本/p>

在不刷新页面的情况下无法使用JQuery更新id

按制造商、型号和年份范围判断数据的存在性

自定义WooCommerce查询字符串仅显示前3个产品

FatFreeFramework上的不同路由

自定义通知在Woocommerce我的帐户自定义端点页面上不起作用

为什么调用干预\映像引发错误驱动程序\GD\Driver not found?

PHP DateInterval天数不一致

WooCommerce产品按特定元数据的自定义数字排序选项

向在添加到购物车上动态创建的WooCommerce产品添加发货类别

Nginx重写扩展名为.php的动态URL

EBay Inventory API createOrReplaceInventoryItem出错

如何在php中生成包含第100秒的时间序列?

如何在Laravel Model中自定义多个日期属性的日期格式?

更改特定产品标签的 Woocommerce 产品名称

在 WooCommerce 中何时何地执行 woocommerce_order_status_completed_notification 挂钩?

Google Sheets PHP API - 添加多个选项卡时出现问题

按前 3 列对二维数组中的行数据进行分组,然后用逗号连接每组中的其余列

如何在不解压缩/重新压缩的情况下连接(连接)两个缩小的值

使用 v-for 的存储链接中的 Img src 在 Laravel vuejs 中不起作用