在函数内获取单选按钮一致的值以更新Wordpress用户数据

问题描述 投票:0回答:2

我有以下函数,其中包含处理配置文件表单的变量数组。除

'member-comptency[]'
之外,除其中一个外,其他都是典型输入。它是一个具有多个可能值的选择字段。现在,表单已保存,所有数据均按预期通过,但该字段除外,该字段仅返回一个数字,我认为该数字是 HTML
value
。再仔细观察一下,元素的“值”也只是一个数字,这可能会让事情变得更糟。

我曾多次尝试以不同的方式修改它,但徒劳无功,但只会产生“无法保存”的情况,或者进一步的非描述性错误。我知道这个字段本身就是一个数组,但不知道如何提出一个更好的问题来让自己走上正轨。

功能

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] );
}

HTML 元素

多种选择之一

<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()
函数中。

php html wordpress post radio-button
2个回答
1
投票

从您的 HTML 示例中,请注意“Manufacturer”单选按钮的值为“1”。

现在,在您的函数中,要使用的元键是

'member-competency'
,而不是
[]

然后请注意,由于输入单选按钮 HTML 中

$_POST['member-competency']
属性名称中的
array('1')
,因此
[]
将给出类似
member-comptency[]
的数组。

如果从

array('1')
得到
$_POST['member-competency']
则表明所选单选按钮是“制造商”,您可以将“制造商”设置为元值。

所以你的功能将是:

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

应该可以。


补充:

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

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, current($meta_value)  );
            } 
            // Other fields
            else {
                update_user_meta( $user_id, $meta_key, esc_attr($meta_value) );
            }
        }
    }      
}

它应该有效并解决您的担忧。


0
投票

我认为“member-competency[]”不是访问 post 数组中的值数组的正确方法。您可以尝试 var_dump() 或 print_r() $_POST['member-competency'];看看数组是否正常显示。

© www.soinside.com 2019 - 2024. All rights reserved.