如何在我的模板中使用此元框函数?(WordPress)

时间:2011-06-20 作者:l2aelba

这是我的职责:

$prefix = \'dbt_\';

$meta_box = array(
    \'id\' => \'my-meta-box\',
    \'title\' => \'Custom meta box\',
    \'page\' => \'post\',
    \'context\' => \'normal\',
    \'priority\' => \'high\',
    \'fields\' => array(
        array(
            \'name\' => \'Checkbox\',
            \'id\' => $prefix . \'checkbox\',
            \'type\' => \'checkbox\'
        )
    )
);

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="\', 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\'], \'">\', $field[\'name\'], \'</label></th>\',
                \'<td>\';
        switch ($field[\'type\']) {
            case \'checkbox\':
                echo \'<input type="checkbox" name="\', $field[\'id\'], \'" id="\', $field[\'id\'], \'"\', $meta ? \' checked="checked"\' : \'\', \' />\';
                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);
        }
    }
}
如果选中以下复选框,我会尝试在模板中使用此代码:

<?php if ($meta_box = get_post_meta($post->ID, "checkbox", true) ) : ?>
Show this when checkbox checked
<?php endif; ?>
但它不起作用

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

您缺少前缀:

一定要打电话global $prefix 查询并使用后$prefix.\'checkbox\' 到您的get_post_meta

<?php if ($meta_box = get_post_meta($post->ID, $prefix.\'checkbox\', true) ) : ?>
Show this when checkbox checked
<?php endif; ?>

SO网友:Dennis Hoppe

在mytheme\\u save\\u data()中从$\\u POST数组读取发送的数据时,忘记使用前缀。

结束

相关推荐

自定义发布类型Metabox-不保存

我添加了一个自定义的post类型,效果很好;我还添加了两个元数据库,它们似乎工作得很好,但它们中的内容总是在几分钟后消失。如果有人能在这方面提供帮助,我将万分感激,S。//元框代码//add_action( \'admin_init\', \'add_custom_metabox\' ); add_action( \'save_post\', \'save_custom_details\' ); function add_custom_metabox() { ad