我正在尝试创建一个具有12个字段的自定义元框。共有3组4个字段,因此我使用for循环创建它们以节省键入等操作。
由于某种原因,我似乎无法让他们储蓄。我不确定我的编码是否正确?我检查了它们是否通过对var_dump($linktext[1]);
查看是否正在保存它,并且返回null。
这是添加元框的回调,以在元框的后端输出字段:
function home_callout_meta_box_cb($post) {
global $post;
wp_nonce_field(\'home_callout_nonce\', \'home_callout_meta_box_nonce\');
$values = get_post_custom($post->ID);
for ($i = 1; $i <= 3; $i++) {
$imagefield1[$i] = isset($values[\'imagefields\'][$i]) ? esc_attr($values[\'imagefields\'][$i][\'image1\'][0]): \'\';
$imagefield2[$i] = isset($values[\'imagefields\'][$i]) ? esc_attr($values[\'imagefields\'][$i][\'image2\'][0]): \'\';
$linktext[$i] = isset($values[\'linktext\'][$i]) ? esc_attr($values[\'linktext\'][$i][0]): \'\';
$link[$i] = isset($values[\'link\'][$i]) ? esc_attr($values[\'link\'][$i][0]): \'\';
echo \'<p><strong>Call out box \' . $i .\' image 1</strong></p>\';
echo \'<div>\';
echo \'<input type="text" id="imagefields\'. [$i] . \'[image1]" name="imagefields\' . [$i] . \'[image1]" class="upload-url image_url" readonly="readonly" value="\' . $imagefield1[$i] .\'" />\';
echo \'<input id="st_upload_button" class="st_upload_button button-secondary upload_image" type="button" name="upload_button" value="Upload" />\';
echo \'</div>\';
echo \'<p><strong>Call out box \' . $i .\' image 2</strong></p>\';
echo \'<div>\';
echo \'<input type="text" id="imagefields\' . [$i] . \'[image2]" name="imagefields\' . [$i] . \'][image2]" class="upload-url image_url" readonly="readonly" value="\' . $imagefield2[$i] .\'" />\';
echo \'<input id="st_upload_button" class="st_upload_button button-secondary upload_image" type="button" name="upload_button" value="Upload" />\';
echo \'</div>\';
echo \'<p><strong>Call out box \' . $i .\' link text</strong></p>\';
echo \'<input type="text" id="linktext\' . [$i] . \'" name="linktext\' . [$i] . \'" value="\' . $linktext[$i] . \'" />\';
echo \'<p><strong>Call out box \' . $i .\' link</strong></p>\';
echo \'<input type="text" id="link\' . [$i] . \'" name="link\' . [$i] . \'" value="\' . $link[$i] . \'" />\';
}
}
这是我的保存功能:
function home_callout_save($post_id) {
if(defined(\'DOING_AUTOSAVE\') && DOING_AUTOSAVE) return;
if(!isset($_POST[\'home_callout_meta_box_nonce\']) || !wp_verify_nonce($_POST[\'home_callout_meta_box_nonce\'], \'home_callout_nonce\')) return;
if(!current_user_can(\'edit_pages\')) return;
if(isset($_POST[\'imagefields\'])) {
update_post_meta($post_id, \'imagefields\', $_POST[\'imagefields\']);
}
if(isset($_POST[\'linktext\'])) {
update_post_meta($post_id, \'linktext\', $_POST[\'linktext\']);
}
if(isset($_POST[\'link\'])) {
update_post_meta($post_id, \'link\', $_POST[\'link\']);
}
}
add_action(\'save_post\', \'home_callout_save\');
我想我已经盯着这个代码看了很久了,我想这可能是我犯的一个小错误,似乎看不到它。
感谢阅读,非常感谢您的帮助。
Edit:
这是我从
$values[\'linktext\']
:
字符串(75)“a:3:{i:1;s:11:“链接文本1”;i:2;s:11:“链接2文本”;i:3;s:11:“链接3文本”;}”
我不知道如何将返回的值放入字段中。
最合适的回答,由SO网友:s1lv3r 整理而成
您以错误的方式访问$\\u POST数组。这是不可能的:
$_POST[\'imagefields[\' . $i . \'][image2]\']
正确的方法是:
$_POST[\'imagefields\'][$i][\'image2\'];
(访问
$values
阵列。)
您还应该将完整的数组提供给update_post_meta()
函数,而不是单独保存每个值:
if(isset($_POST[\'imagefields\'])) {
update_post_meta($post_id, \'imagefields\', $_POST[\'imagefields\']);
}
*
EDIT*您可以使用以下代码查看保存到post\\U meta的值是否正确:
$values = get_post_custom($post->ID);
var_dump($values);
要修复$values部分,您需要更改以下所有事件:
$values[\'imagefields[\' . $i . \'][image1]\']
收件人:
$values[\'imagefields\'][$i][\'image1\']