0

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);
        }
    }
}
7
  • 1
    Is your site front page displaying the blog posts index, or a static page? Nov 28, 2012 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, 2012 at 12:52
  • It's not a static page. Front page displays is latest posts.
    – Blanka
    Nov 28, 2012 at 13:35
  • Kaiser, I want to mean that the data is entered in the meta box is not displayed.
    – Blanka
    Nov 28, 2012 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? Nov 28, 2012 at 15:08

1 Answer 1

1

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.

5
  • 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, 2012 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, 2012 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. Nov 29, 2012 at 12:54
  • Sorry, Chip, but yesterday I didn't understand what you wanted to say, but thanks for your help.
    – Blanka
    Nov 29, 2012 at 13:02
  • 1
    If the code helped you, why not mark it as an accepted answer? :) Jun 27, 2013 at 5:56

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

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