我有一组元盒,现在终于可以保存了,但正在努力将保存的值返回到它们来自的输入框中。例如,我有一个名为link text的元字段,如果我在其中放入“link 1 text”并保存,我会保存它,但它不会显示在表单中。
我使用的代码是:
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][\'image1\']) ? esc_attr($values[\'imagefields\'][$i][\'image1\'][0]): \'\';
$imagefield2[$i] = isset($values[\'imagefields\'][$i][\'image2\']) ? 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] . \'" />\';
// var_dump($values[\'imagefields\'][0]);
}
}
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\');
我知道字段会保存,因为如果我进行var\\u转储($values[\'linktext\');
这是返回的数组:
array(1) { [0]=> string(75) "a:3:{i:1;s:11:"link text 1";i:2;s:11:"Link 2 text";i:3;s:11:"Link 3 text";}" }
我不确定如何将保存的值返回到每个字段中。
我还有一个小问题,那就是检索前端每个元框的值,我会使用:
get_post_meta($post_id, \'linktext\'][1]\', true);
提前感谢您的帮助。
SO网友:asaunders
所以我最终得到了字段中出现的值。我不确定我是否做得很好。但我很高兴能就如何做得更好发表一些意见。
这是我的代码:
function home_callout_meta_box_cb($object, $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][\'image1\']) ? esc_attr($values[\'imagefields\'][$i][\'image1\'][0]): \'\';
$imagefield2[$i] = isset($values[\'imagefields\'][$i][\'image2\']) ? 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]): \'\';
$linkText = get_post_meta( $object->ID, \'linktext\', true );
$linkUrl = get_post_meta( $object->ID, \'link\', true );
$image = get_post_meta( $object->ID, \'imagefields\', true );
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="\' . $image[$i][\'image1\'] .\'" />\';
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="\' . $image[$i][\'image2\'] .\'" />\';
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="\' . $linkUrl[$i] . \'" />\';
}
}
我所做的是创建了一些变量来检索元数据,它返回了一个数组,这样我就可以使用$i来获取正确的变量并在字段中回显该值。
我觉得这是一种混乱的方式,所以如果有办法的话,希望能就如何做得更好发表一些意见?