显示Metabox值(自定义帖子类型分类)

时间:2014-05-18 作者:Misty

我已经在这上面呆了好几天了,读了一篇又一篇的文章,什么都不管用。我正在尝试在模板页面上显示我的metabox的值。

我成功地添加了元盒,并且在我的页面管理中看到了选择框,它似乎也保存得很好。

我似乎无法在模板页面上回显元数据库中选定的类别。

我读到的每一个地方都说使用以下对我不起作用的内容。

<?php 
echo get_post_meta( $post->ID, \'sm_taxonomy\', true );
?>
下面是我的其余代码

add_filter( \'rwmb_meta_boxes\', \'sm_register_meta_boxes\' );

function sm_register_meta_boxes( $meta_boxes )
{


/**
 * Prefix of meta keys (optional)
 * Use underscore (_) at the beginning to make keys hidden
 * Alt.: You also can make prefix empty to disable it
 */
// Better has an underscore as last sign
$prefix = \'sm_\';

$meta_boxes = array();

$meta_boxes[] = array(
\'id\' => \'my-meta-box-2\',
\'title\' => \'Portfolio Category\',
\'pages\' => array(\'page\', \'\'), // custom post type
\'show_on\' => array( \'key\' => \'page-template\', \'value\' => \'grid-gallery.php\' ),
\'context\' => \'normal\',
\'priority\' => \'high\',
\'fields\' => array(
    array(
            \'name\'    => __( \'Choose a category\', \'rwmb\' ),
            \'id\'      => "{$prefix}taxonomy",
            \'type\'    => \'taxonomy\',
            \'options\' => array(
                // Taxonomy name
                \'taxonomy\' => \'portfolio_category\',
                // How to show taxonomy: \'checkbox_list\' (default) or \'checkbox_tree\', \'select_tree\', select_advanced or \'select\'. Optional
                \'type\' => \'select\',
                // Additional arguments for get_terms() function. Optional
                \'args\' => array()
            ),
        ),
)
);
return $meta_boxes;

foreach ($meta_boxes as $meta_box) {
$my_box = new My_meta_box($meta_box);
}

add_action(\'save_post\', \'save\');

}
和。。

class My_meta_box {

protected $_meta_box;

// create meta box based on given data
function __construct($meta_box) {
    $this->_meta_box = $meta_box;
    add_action(\'admin_menu\', array(&$this, \'add\'));

    add_action(\'save_post\', array(&$this, \'save\'));
}

/// Add meta box for multiple post types
function add() {
    foreach ($this->_meta_box[\'pages\'] as $page) {
        add_meta_box($this->_meta_box[\'id\'], $this->_meta_box[\'title\'], array(&$this, \'show\'), $page, $this->_meta_box[\'context\'], $this->_meta_box[\'priority\']);
    }
}

// Callback function to show fields in meta box
function show() {
    global $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 ($this->_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 \'text\':
                echo \'<input type="text" name="\', $field[\'id\'], \'" id="\', $field[\'id\'], \'" value="\', $meta ? $meta : $field[\'std\'], \'" size="30" style="width:97%" />\',
                    \'<br />\', $field[\'desc\'];
                break;
            case \'textarea\':
                echo \'<textarea name="\', $field[\'id\'], \'" id="\', $field[\'id\'], \'" cols="60" rows="4" style="width:97%">\', $meta ? $meta : $field[\'std\'], \'</textarea>\',
                    \'<br />\', $field[\'desc\'];
                break;
            case \'select\':
                echo \'<select name="\', $field[\'id\'], \'" id="\', $field[\'id\'], \'">\';
                foreach ($field[\'options\'] as $option) {
                    echo \'<option\', $meta == $option ? \' selected="selected"\' : \'\', \'>\', $option, \'</option>\';
                }
                echo \'</select>\';
                break;
            case \'radio\':
                foreach ($field[\'options\'] as $option) {
                    echo \'<input type="radio" name="\', $field[\'id\'], \'" value="\', $option[\'value\'], \'"\', $meta == $option[\'value\'] ? \' checked="checked"\' : \'\', \' />\', $option[\'name\'];
                }
                break;
            case \'checkbox\':
                echo \'<input type="checkbox" name="\', $field[\'id\'], \'" id="\', $field[\'id\'], \'"\', $meta ? \' checked="checked"\' : \'\', \' />\';
                break;
        }
        echo     \'<td>\',
            \'</tr>\';
    }

    echo \'</table>\';
}

// Save data from meta box
function save($post_id) {
    // 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 ($this->_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);
        }
    }
}
}

2 个回复
SO网友:maheshwaghmare

试试这个

用于single 模板global $post;
echo get_post_meta( $post->ID , \'sm_taxonomy\', true );

用于archive 模板if ( have_posts() ) : while ( have_posts() ) : the_post();
echo get_post_meta( get_the_ID() , \'sm_taxonomy\', true );
endif;

SO网友:Mom-again

按ID显示:如果“ID”=>“my-meta-box-2”,则ID为“my-meta-box-2”,true);?>如果您使用的是rwmb插件,请查看资源以正确响应插件。

结束

相关推荐

通过Metabox查询另一个CPT的自定义发布类型

我提前道歉,我在发布这个问题之前搜索了一个答案,但没有看到,我看到了一些变化,但无法完全理解。我有两种自定义帖子类型:建筑和公寓。我想通过metabox下拉列表为每个公寓分配一栋建筑。这就是我的职能。php文件:function get_myposttype_options( $query_args ) { $args = wp_parse_args( $query_args, array( \'post_type\' => \'buildings\', )