我创建了一个自定义元框,并将其粘贴到函数中。php(减去<?php
当然可以打电话)
我在这个元框中有两个字段,一个标记为“主要标题”,另一个标记为“次要标题”。
如何分别调用这些框中的数据,以便将它们插入到页面模板中?
<?php
$prefix = \'dbt_\';
$meta_box = array(
\'id\' => \'my-meta-box\',
\'title\' => \'Custom meta box\',
\'page\' => \'post\',
\'context\' => \'normal\',
\'priority\' => \'high\',
\'fields\' => array(
array(
\'name\' => \'Primary Title\',
\'id\' => $prefix . \'text\',
\'type\' => \'text\'
),
array(
\'name\' => \'Secondary Title\',
\'id\' => $prefix . \'text1\',
\'type\' => \'text\',
)
)
);
add_action(\'admin_menu\', \'mytheme_add_box\');
// Add meta box
function mytheme_add_box() {
global $meta_box;
add_meta_box(
$meta_box[\'id\'],
$meta_box[\'title\'],
\'mytheme_show_box\',
$meta_box[\'page\'],
$meta_box[\'context\'],
$meta_box[\'priority\']
);
}
// Callback function to show fields in meta box
function mytheme_show_box() {
global $meta_box, $post;
// Use nonce for verification
echo \'<input type="hidden" name="mytheme_meta_box_nonce" value="\';
echo wp_create_nonce(basename(__FILE__)), \'" />\';
echo \'<table class="form-table">\';
foreach ($meta_box[\'fields\'] as $field) {
// get current post meta data
$meta = get_post_meta($post->ID, $field[\'id\'], true);
echo \'<tr><th style="width:20%"><label for="\' . $field[\'id\'] . \'">\';
echo $field[\'name\'];
echo \'</label></th><td>\';
switch ($field[\'type\']) {
case \'text\':
echo \'<input type="text" name="\' . $field[\'id\'] . \'"\';
echo \' id="\' .$field[\'id\'] . \'"\';
echo \' value="\' . ( $meta ? $meta : $field[\'std\'] ) . \'"\';
echo \' size="30" style="width:97%" />\';
echo \'<br />\' . $field[\'desc\'];
break;
}
echo \'<td></tr>\';
}
echo \'</table>\';
}
add_action(\'save_post\', \'mytheme_save_data\');
// Save data from meta box
function mytheme_save_data($post_id) {
global $meta_box;
// verify nonce
if (!wp_verify_nonce($_POST[\'mytheme_meta_box_nonce\'], basename(__FILE__))) {
return $post_id;
}
// check autosave
if (defined(\'DOING_AUTOSAVE\') && DOING_AUTOSAVE) {
return $post_id;
}
// check permissions
if (\'page\' == $_POST[\'post_type\']) {
if (!current_user_can(\'edit_page\', $post_id)) {
return $post_id;
}
} elseif (!current_user_can(\'edit_post\', $post_id)) {
return $post_id;
}
foreach ($meta_box[\'fields\'] as $field) {
$old = get_post_meta($post_id, $field[\'id\'], true);
$new = $_POST[$field[\'id\']];
if ($new && $new != $old) {
update_post_meta($post_id, $field[\'id\'], $new);
} elseif ( \'\' == $new && $old ) {
delete_post_meta($post_id, $field[\'id\'], $old);
}
}
}
?>
SO网友:Aris Blevins
我刚刚在wp\\u debug打开的情况下运行了您的初始代码,似乎需要一些基本的内务管理来将数据实际保存到自定义字段中。我认为到目前为止,您的问题是没有保存任何数据,因此您无法读取任何内容。
在第55行和第57行,您试图打印阵列中不存在的部分,这会导致一些错误。
第55行:
echo \' value="\' . ( $meta ? $meta : $field[\'std\'] ) . \'"\';
$field[\'std\']
不存在,只有
$field
是
name
,
id
和
type
.
第57行:
echo \'<br />\' . $field[\'desc\'];
$field[\'desc\']
也不存在。如果希望这些键存在于阵列中,请首先将它们添加到元盒阵列中。
我将第55行改为参考$field[\'id\']
删除了第57行,效果很好。
然后,在模板文件中,如果调用:
$value = get_post_meta($post->ID, \'dbt_text\', true);
$value1 = get_post_meta($post->ID, \'dbt_text1\', true);
echo $value;
您将看到正确的数据。