我不知道我错在哪里。我想将单选按钮的值保存在自定义元框中。这是我的密码。
<?php
if (!function_exists(\'custom_meta_box\')) {
function custom_meta_box(){
add_meta_box(
\'custom-meta-box\',
__(\'Post Options\', \'spectacularpixels\'),
\'post_options_callback\',
\'post\',
\'normal\',
\'high\'
);
}
}
if (!function_exists(\'post_options_callback\')) {
function post_options_callback($post_id){
wp_nonce_field( \'action_layout_nonce\', \'name_layout_nonce\' );
$value = get_post_meta( $post_id, \'my_key\', true );
?>
<label for="layout-none">None</label>
<input type="radio" id="layout-none" name="layout" value="layout-none" <?php checked($value, \'layout-none\') ?>>
<label for="layout-left">Left</label>
<input type="radio" id="layout-left" name="layout" value="layout-left" <?php checked($value, \'layout-left\') ?>>
<label for="layout-right">Right</label>
<input type="radio" id="layout-right" name="layout" value="layout-right" <?php checked($value, \'layout-right\') ?>>
<?php
}
}
if (!function_exists(\'save_meta_data\')) {
function save_meta_data($post_id){
// Bail if we\'re doing an auto save
if( defined( \'DOING_AUTOSAVE\' ) && DOING_AUTOSAVE ) return;
// if our nonce isn\'t there, or we can\'t verify it, bail
if( !isset( $_POST[\'name_layout_nonce\'] ) || !wp_verify_nonce( $_POST[\'name_layout_nonce\'], \'action_layout_nonce\' ) ) {echo "nonce error";};
// if our current user can\'t edit this post, bail
if( !current_user_can( \'edit_post\' ) ) return;
update_post_meta($post_id, \'my_key\', $_POST[\'layout\']);
}
}
add_action(\'add_meta_boxes\', \'custom_meta_box\');
add_action(\'save_post\', \'save_meta_data\');
?>
最合适的回答,由SO网友:david.binda 整理而成
您的值实际上正在保存-您可以随时在数据库中检查它。
问题出在metabox回调函数中post_options_callback
- 它不是用Post调用的。ID值作为参数,但正在传递WP Post对象。下面是重新访问的一段代码:
function post_options_callback( $post ) {
$post_id = $post->ID;
我还建议您不要将函数包装为
function_exists
选中,但使用唯一前缀作为前缀。例如:
my_plugin_
(将其替换为您的插件名称)或
binda_
(将其替换为您的昵称或姓名)。
这样,当您安装其他定义同名函数的插件时,您可以确保插件不会停止工作。
另一种方法是将插件函数封装到类中。
注意:还要使用唯一的meta\\u键名称(在它们前面加前缀)。