为什么我的元盒不能出现在头版?

时间:2012-11-28 作者:Blanka

我到处都能看到它:在单篇文章、分类档案等中,但在头版文章中却看不到。

我以这种方式显示元盒:

<?php if (get_post_meta($post->ID, \'test_1\', true) != \'\' ) { ?><?php echo get_post_meta($post->ID, \'test_1\', true);?><?php } ?>
怎么了?我做错了什么?是否可以以不同的方式显示元方框?

Here is the code:

add_action( \'init\', \'create_xy_taxonomies\', 0 );
function create_pc_db_taxonomies() {
register_taxonomy( \'genre\', \'post\', array( \'hierarchical\' => false, \'label\' => __(\'Tests\', \'series\'), \'query_var\' => \'test\', \'rewrite\' => array( \'slug\' => \'tests\' ) ) );

$prefix = \'xy_meta_\';


$meta_box = array(
    \'id\' => \'xy-meta-box\',
    \'title\' => \'Xy tests\',
    \'page\' => \'post\',
    \'context\' => \'normal\',
    \'priority\' => \'high\',
    \'fields\' => array(
        array(
            \'name\' => \'Test_1\',
            \'id\' => \'test_1\',
            \'type\' => \'text\',
            \'std\' => \'\'
        ),
        array(
            \'name\' => \'Test_2\',
            \'id\' => \'test_2\',
            \'type\' => \'select\',
            \'options\' => array(\'\',\'1\'),
            \'std\' => \'\'
        ),
    )
);

add_action(\'admin_menu\', \'mytheme_add_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\']);
}

function mytheme_show_box() {
    global $meta_box, $post;


    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) {

        $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>\';
}

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


function mytheme_save_data($post_id) {
    global $meta_box;
    if (!wp_verify_nonce($_POST[\'mytheme_meta_box_nonce\'], basename(__FILE__))) {
        return $post_id;
    }
    if (defined(\'DOING_AUTOSAVE\') && DOING_AUTOSAVE) {
        return $post_id;
    }
    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);
        }
    }
}

1 个回复
SO网友:Chip Bennett

假设您的站点首页显示static page, 你的元数据没有出现在网站首页的原因是因为你只为post 职位类型:

$meta_box = array(
    // ...
    // refer to this array key
    \'page\' => \'post\',
    // ...
);

// ...

function mytheme_add_box() {
    global $meta_box;

    add_meta_box( 
        $meta_box[\'id\'], 
        $meta_box[\'title\'], 
        \'mytheme_show_box\', 
        // Refer to this parameter, which tells
        // WordPress that this meta box applies
        // to the post post-type
        $meta_box[\'page\'], 
        $meta_box[\'context\'], 
        $meta_box[\'priority\']);
}

// ...

// Refer to this hook, that tells WordPress
// to hook your save post meta callback into
// the save action for the post post-type
add_action(\'save_post\', \'mytheme_save_data\');
要在page post类型,您需要致电add_meta_box() 对于两者post page, 您需要将save-post-meta回调挂接到这两个save_post save_page. (注意:您还需要draft_postdraft_page 避免自动保存引起的头痛。

结束