Take the 2-minute tour ×
WordPress Development Stack Exchange is a question and answer site for WordPress developers and administrators. It's 100% free, no registration required.

I see it everywhere: in single post, in category archives etc, but in front page post not.

I display the metaboxes in this way:

<?php if (get_post_meta($post->ID, 'test_1', true) != '' ) { ?><?php echo get_post_meta($post->ID, 'test_1', true);?><?php } ?>

What's wrong? What i'm doing wrong? Is possible to display the meta boxies in a different way?

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);
        }
    }
}
share|improve this question
1  
Is your site front page displaying the blog posts index, or a static page? –  Chip Bennett Nov 28 '12 at 12:18
    
What is "meta boxies"? Do you mean the data you entered in the meta box, or the complete meta box (UI)? –  kaiser Nov 28 '12 at 12:52
    
It's not a static page. Front page displays is latest posts. –  Blanka Nov 28 '12 at 13:35
    
Kaiser, I want to mean that the data is entered in the meta box is not displayed. –  Blanka Nov 28 '12 at 13:37
    
If the front page is displaying the Blog Posts Index, then can we see your get_post_meta() call in the context of the Loop? –  Chip Bennett Nov 28 '12 at 15:08
show 2 more comments

1 Answer

Assuming that your site front page is displaying a static page, the reason that your meta data doesn't appear on the site front page is because you only enable your post custom meta box for post post-types:

$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');

To use this same post custom meta also on the page post-type, you'll need to call add_meta_box() for both post and page, and you'll need to hook your save post meta callback into both save_post and save_page. (Note: you'll also want to hook into draft_post and draft_page to spare yourself headaches caused by auto-saves.

share|improve this answer
    
It's not a static page and I can't figure out what do you say. Actually, I don't know how to do this. –  Blanka Nov 28 '12 at 15:06
    
PROBLEM SOLVED ! This is the solution: <?php if (get_post_meta( get_the_ID(), 'year', true )) { ?> (<?php echo esc_html( get_post_meta( get_the_ID(), 'test_1', true ) ); ?>)<?php } ?> –  Blanka Nov 29 '12 at 12:48
    
That's why I asked to see your get_post_meta() call in context. Your question uses the $post variable, which must be globalized before it can be used. –  Chip Bennett Nov 29 '12 at 12:54
    
Sorry, Chip, but yesterday I didn't understand what you wanted to say, but thanks for your help. –  Blanka Nov 29 '12 at 13:02
1  
If the code helped you, why not mark it as an accepted answer? :) –  Mayeenul Islam Jun 27 '13 at 5:56
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.