如何在带有无线输入的1元键中存储多个值?

时间:2011-11-26 作者:John Bentwin

如何在一个中存储多个值meta_key 通过无线电输入,然后在页面上显示这两个值?一个值是文本字符串,另一个值是与该文本相关的链接。这些值不会更改,将由无线框中的数据填充。

这是我的元框的代码。我要收音机event_venue 有一个附加值,可以链接到场馆页面。这样,我只需单击场馆的单选按钮,页面的名称和链接就会自动显示出来。

 $meta_box[\'event\'] = array(
    \'id\' => \'event-meta-details\',
    \'title\' => \'Event Information\',
    \'context\' => \'normal\',
    \'priority\' => \'high\',
    \'fields\' => array(
        array(
            \'name\' => \'Start Date\',
            \'desc\' => \'(Enter yyyy/mm/dd)\',
            \'id\' => \'start_date\',
            \'type\' => \'text\',
            \'default\' => \'\'
        ),
        array(
            \'name\' => \'End Date\',
            \'desc\' => \'(Enter yyyy/mm/dd)\',
            \'id\' => \'end_date\',
            \'type\' => \'text\',
            \'default\' => \'\'
        ),
        array(
            \'name\' => \'Opening\',
            \'desc\' => \'YYYY-MM-DD 00:00 24 hour clock\',
            \'id\' => \'opening_time\',
            \'type\' => \'text\',
            \'default\' => \'\'
        ),
           array(
            \'name\' => \'Closing\',
            \'desc\' => \'YYYY-MM-DD 00:00 24 hour clock\',
            \'id\' => \'closing_time\',
            \'type\' => \'text\',
            \'default\' => \'\'
        ),
        array(
            \'name\' => \'Artist Talk - Lecture\',
            \'desc\' => \'YYYY-MM-DD 00:00 24 hour clock\',
            \'id\' => \'artist_talk_time\',
            \'type\' => \'text\',
            \'default\' => \'\'
        ),
        array(
        \'name\' => \'Venue\',
        \'desc\' => \'Venue of Event\',
        \'id\' => $prefix . \'event_venue\',
        \'type\' => \'radio\',
        \'options\' => array(
            array(\'name\' => \'William Busta Gallery\', \'value\' => \'William Busta Gallery\'),
            array(\'name\' => \'Spaces\', \'value\' => \'Spaces\'),
            array(\'name\' => \'Enter Text Below\', \'value\' => \'other\')
        )
    ),
        array(
            \'name\' => \'Custom Venue\',
            \'desc\' => \'Enter Venue Name if Enter Text Below is Checked\',
            \'id\' => \'custom_event_venue\',
            \'type\' => \'text\',
            \'default\' => \'\'
        ),
        array(
                \'name\' => \'Featured / Reccomended\',
            \'desc\' => \'Recommended Event\',
            \'id\' => \'featured_event\',
            \'type\' => \'checkbox\',
            \'default\' => \'\'
          )

    )
);
现在我这样显示场地值。

if (get_post_meta(get_the_ID(),\'event_venue\', true) != \'other\') { 
    echo get_post_meta(get_the_ID(),\'event_venue\', true);
    }
if (get_post_meta(get_the_ID(),\'event_venue\', true) == \'other\') {
    echo get_post_meta(get_the_ID(),\'custom_event_venue\', true);
    }
这是保存数据的代码。

// Save data from meta box
function plib_save_data($post_id) {
    global $meta_box,  $post;

    //Verify nonce
    if (!wp_verify_nonce($_POST[\'plib_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[$post->post_type][\'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);
        }
    }
}

add_action(\'save_post\', \'plib_save_data\');
提前感谢您的建议。我很困惑。

1 个回复
最合适的回答,由SO网友:tollmanz 整理而成

约翰,

我不确定单选按钮是如何设置的,但WordPress可以在一个meta\\u键中轻松处理多个值。只需将值放入数组中,然后再将其发送到update_post_meta. 例如:

$array = array( \'foo\' => \'foo_value\', \'bar\' => \'bar_value\' );
update_post_meta( $id, \'my_meta_key\', $array );
WordPress在传入时自动序列化此数组,在传出时取消序列化。

我个人的建议是将这两个数据保存为单独的元数据。通过序列化数组并将其发送到数据库,您将失去查询单个信息的能力。

最后,您应该确保在将数据保存到数据库时对其进行清理/验证,并在显示时对其进行转义。《食品法典》有一篇很好的文章介绍了如何做到这一点:http://codex.wordpress.org/Data_Validation

结束

相关推荐

featured image metabox MU

我有一个MU安装,我的主站点(site.com)的管理员显示了特色图片元框,但子站(site.com/blog1)的管理员F.I.M.B.在屏幕选项选项卡中没有显示或可用。。这些网站运行相同的主题和设置。这两个站点都运行(相同的)子主题add_theme_support(\'post-thumbnails\');在父主题(框架)中定义。就像add_theme_support(\'post-thumbnails\'); 仅对我的网络中的主站点有效。。这是一个已知的问题,还是应该开始挖掘mu设置中的bug?