我有以下函数,其中包含处理配置文件表单的变量数组。除
'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] );
}
多种选择之一
<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 示例中,请注意“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) );
}
}
}
}
它应该有效并解决您的担忧。
我认为“member-competency[]”不是访问 post 数组中的值数组的正确方法。您可以尝试 var_dump() 或 print_r() $_POST['member-competency'];看看数组是否正常显示。