自定义元框不保存WordPress中的单选按钮值

时间:2014-09-19 作者:user3443160

我不知道我错在哪里。我想将单选按钮的值保存在自定义元框中。这是我的密码。

<?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\');
?>

2 个回复
最合适的回答,由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键名称(在它们前面加前缀)。

SO网友:maheshwaghmare

将代码替换为:

echo($值[0]==\'布局无\')?\'checked=“checked”\':“”
echo($value[0]==\'左布局\')?\'checked=“checked”\':“”
echo($value[0]=\'右布局\')?\'checked=“checked”\':“”

完成更新代码:

<label for="layout-none">None</label>
                <input type="radio" id="layout-none" name="layout" value="layout-none" <?php echo ($value[0] == \'layout-none\')? \'checked="checked"\':\'\'; ?>>
                <label for="layout-left">Left</label>
                <input type="radio" id="layout-left" name="layout" value="layout-left" <?php echo ($value[0] == \'layout-left\')? \'checked="checked"\':\'\'; ?>>
                <label for="layout-right">Right</label>
                <input type="radio" id="layout-right" name="layout" value="layout-right" <?php echo ($value[0] == \'layout-right\')? \'checked="checked"\':\'\'; ?>>

结束

相关推荐

动态复制自定义帖子类型中的自定义Metabox

我正在Wordpress中构建一个自定义帖子类型,用于在客户博客上编写和显示BuzzFeed风格的测验。在自定义帖子类型中,有一个自定义元框,表示每个问题和选择,另一个表示潜在的最终结果。因此,第一个元框由一个数字输入类型(用于分配ID)、一个文本字段(用于输入问题)和另一个字段(用于输入图像)组成。对作者来说,这是他们测验中的第一个问题。如果他们要输入多个问题,则需要选择按钮以添加另一组字段。我不确定如何生成该字段并确保保存任何添加的字段。我不想求助于插件或插件库,因为学习如何做和解决它一样重要。