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 have this code

<?php
$prefix = 'wtf_';

$meta_box = array(
    'id' => 'propertybox',
    'title' => 'Property listing details',
    'page' => 'listings',
    'context' => 'normal',
    'priority' => 'high',
    'fields' => array(
            array(
            'name' => 'Propert ID number',
            'desc' => 'Enter a property ID number, if any ',
            'id' => $prefix . 'pid',
            'type' => 'text',
            'std' => ''
        ),


        array(
            'name' => 'Bath',
            'desc' => 'Number of bathrooms.',
            'id' => $prefix . 'bath',
            'type' => 'text',
            'std' => ''
        ),      

        array(
            'name' => 'An',
            'desc' => 'Anul constructiei',
            'id' => $prefix . 'an',
            'type' => 'text',
            'std' => ''
        ),      

        array(
            'name' => 'Etaj',
            'desc' => 'Etajul',
            'id' => $prefix . 'etaj',
            'type' => 'text',
            'std' => ''
        ),      

        array(
            'name' => 'Balcone',
            'desc' => 'Numar balcoane',
            'id' => $prefix . 'balcon',
            'type' => 'text',
            'std' => ''
        ),      

        array(
            'name' => 'Parcare',
            'desc' => 'Numar locuri de parcare',
            'id' => $prefix . 'parcare',
            'type' => 'text',
            'std' => ''
        ),      

        array(
            'name' => 'Suprafata totala',
            'desc' => 'Suprafata totala a terenului (Casa/vila)',
            'id' => $prefix . 'suprafatatotala',
            'type' => 'text',
            'std' => ''
        ),      

        array(
            'name' => 'Front stradal',
            'desc' => 'Suprafata front stradal',
            'id' => $prefix . 'front',
            'type' => 'text',
            'std' => ''
        ),      

        array(
            'name' => 'Suprafata curte libera ',
            'desc' => 'Suprafata curte libera ',
            'id' => $prefix . 'suprafatacurte',
            'type' => 'text',
            'std' => ''
        ),      

        array(
            'name' => 'Amprenta casei ',
            'desc' => 'Suprafata amprentei  ',
            'id' => $prefix . 'amprenta',
            'type' => 'text',
            'std' => ''
        ),      

        array(
            'name' => 'Regim inaltime',
            'desc' => 'Regim inaltime  ',
            'id' => $prefix . 'inaltime',
            'type' => 'text',
            'std' => ''
        ),      

        array(
            'name' => 'Certificat urbanism ',
            'desc' => 'certificat urbanism',
            'id' => $prefix . 'certificat',
            'type' => 'text',
            'std' => ''
        ),      

        array(
            'name' => 'Asking price',
            'desc' => 'Enter the actual asking price ',
            'id' => $prefix . 'price',
            'type' => 'text',
            'std' => ''
        )


    ),

);


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 '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 class="theEditor" 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>',
                '<br />', $field['desc'];
                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');

// 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);
        }
    }
}

?>

I want the first 3(propert id number, bath, an ) to be categorise in property listing and the others in Mansion listing detalis

enter image description here

I have done this : but it would not show the first box now the propertybox it is showing just the mansionbox

<?php
$prefix = 'wtf_';

$meta_box = array(
    'id' => 'propertybox',
    'title' => 'Property listing details',
    'page' => 'listings',
    'context' => 'normal',
    'priority' => 'high',
    'fields' => array(
            array(
            'name' => 'Propert ID number',
            'desc' => 'Enter a property ID number, if any ',
            'id' => $prefix . 'pid',
            'type' => 'text',
            'std' => ''
        ),


        array(
            'name' => 'Bath',
            'desc' => 'Number of bathrooms.',
            'id' => $prefix . 'bath',
            'type' => 'text',
            'std' => ''
        ),
    ),

);

$meta_box = array(
    'id' => 'mansionbox',
    'title' => 'mansion listing details',
    'page' => 'listings',
    'context' => 'normal',
    'priority' => 'high',
    'fields' => array(      
        array(
            'name' => 'An',
            'desc' => 'Anul constructiei',
            'id' => $prefix . 'an',
            'type' => 'text',
            'std' => ''
        ),      

        array(
            'name' => 'Etaj',
            'desc' => 'Etajul',
            'id' => $prefix . 'etaj',
            'type' => 'text',
            'std' => ''
        ),      

        array(
            'name' => 'Balcone',
            'desc' => 'Numar balcoane',
            'id' => $prefix . 'balcon',
            'type' => 'text',
            'std' => ''
        ),      

        array(
            'name' => 'Parcare',
            'desc' => 'Numar locuri de parcare',
            'id' => $prefix . 'parcare',
            'type' => 'text',
            'std' => ''
        ),      

        array(
            'name' => 'Suprafata totala',
            'desc' => 'Suprafata totala a terenului (Casa/vila)',
            'id' => $prefix . 'suprafatatotala',
            'type' => 'text',
            'std' => ''
        ),      

        array(
            'name' => 'Front stradal',
            'desc' => 'Suprafata front stradal',
            'id' => $prefix . 'front',
            'type' => 'text',
            'std' => ''
        ),      

        array(
            'name' => 'Suprafata curte libera ',
            'desc' => 'Suprafata curte libera ',
            'id' => $prefix . 'suprafatacurte',
            'type' => 'text',
            'std' => ''
        ),      

        array(
            'name' => 'Amprenta casei ',
            'desc' => 'Suprafata amprentei  ',
            'id' => $prefix . 'amprenta',
            'type' => 'text',
            'std' => ''
        ),      

        array(
            'name' => 'Regim inaltime',
            'desc' => 'Regim inaltime  ',
            'id' => $prefix . 'inaltime',
            'type' => 'text',
            'std' => ''
        ),      

        array(
            'name' => 'Certificat urbanism ',
            'desc' => 'certificat urbanism',
            'id' => $prefix . 'certificat',
            'type' => 'text',
            'std' => ''
        ),      

        array(
            'name' => 'Asking price',
            'desc' => 'Enter the actual asking price ',
            'id' => $prefix . 'price',
            'type' => 'text',
            'std' => ''
        )


    ),

);
share|improve this question
    
I'm not sure if I understand your question. Is your Property listing and Mansion listing two different post types? Are Property and Mansion a taxonomy? –  cybmeta Sep 2 '13 at 14:33
    
in my dashbord i have this big box with all those details i want to make more than one box first 3 in one proprety box and the rest in another one. i am sorry that i don't know how to explain myself better, i am new in to wordpress, thank you very much for your help –  Bogdan Bătrânu Sep 2 '13 at 15:30
    
"...one box first 3 in one proprety box and the rest in another one..." -- Sorry? You made one box already. Do the same thing twice with different data. I don't understand the problem. –  s_ha_dum Sep 2 '13 at 15:47
add comment

2 Answers 2

up vote 0 down vote accepted

The code you posted in your question is very very very incomplete, anyway I will try to give you an answer.

You can define as many meta box as you need and put inside each meta box the fields you want. For example:

add_action( 'add_meta_boxes', 'my_meta_boxes' );
function my_meta_boxes(){
    //We define the two metaboxes I want
    add_meta_box("propertybox", "Property Options", "propertybox", "listings", "normal", "high");
    add_meta_box("mansionbox", "Mansion Options", "mansionbox", "listings", "normal", "high");
 }

//Function for propertybox
function propertybox(){
   //Write here the HTML for the output of the "Property" metabox
}

//Function for mansionbox
function mansionbox(){
   //Write here the HTML for the output of the "Mansion" metabox
}

Adapting your code with this approach (fully functional):

$prefix = 'wtf_';

$property_fields = array(
         array(
            'name' => 'Propert ID number',
            'desc' => 'Enter a property ID number, if any ',
            'id'   =>   $prefix.'pid',
            'type' => 'text',
            'std'   => ''
         ),
         array(
            'name' => 'Bath',
            'desc' => 'Number of bathrooms.',
            'id'   => $prefix.'bath',
            'type' => 'text',
            'std'  => ''
         ),      
         array(
             'name' => 'An',
             'desc' => 'Anul constructiei',
             'id'   => $prefix.'an',
             'type' => 'text',
             'std'  => ''
         ));

$mansion_fields = array(    

    array(
        'name' => 'Etaj',
        'desc' => 'Etajul',
        'id' => $prefix . 'etaj',
        'type' => 'text',
        'std' => ''
    ),      

    array(
        'name' => 'Balcone',
        'desc' => 'Numar balcoane',
        'id' => $prefix . 'balcon',
        'type' => 'text',
        'std' => ''
    ),      

    array(
        'name' => 'Parcare',
        'desc' => 'Numar locuri de parcare',
        'id' => $prefix . 'parcare',
        'type' => 'text',
        'std' => ''
    ),      

    array(
        'name' => 'Suprafata totala',
        'desc' => 'Suprafata totala a terenului (Casa/vila)',
        'id' => $prefix . 'suprafatatotala',
        'type' => 'text',
        'std' => ''
    ),      

    array(
        'name' => 'Front stradal',
        'desc' => 'Suprafata front stradal',
        'id' => $prefix . 'front',
        'type' => 'text',
        'std' => ''
    ),      

    array(
        'name' => 'Suprafata curte libera ',
        'desc' => 'Suprafata curte libera ',
        'id' => $prefix . 'suprafatacurte',
        'type' => 'text',
        'std' => ''
    ),      

    array(
        'name' => 'Amprenta casei ',
        'desc' => 'Suprafata amprentei  ',
        'id' => $prefix . 'amprenta',
        'type' => 'text',
        'std' => ''
    ),        

    array(
        'name' => 'Regim inaltime',
        'desc' => 'Regim inaltime  ',
        'id' => $prefix . 'inaltime',
        'type' => 'text',
        'std' => ''
    ),      

    array(
        'name' => 'Certificat urbanism ',
        'desc' => 'certificat urbanism',
        'id' => $prefix . 'certificat',
        'type' => 'text',
        'std' => ''
    ),      

    array(
        'name' => 'Asking price',
        'desc' => 'Enter the actual asking price ',
        'id' => $prefix . 'price',
        'type' => 'text',
        'std' => ''
    ));

add_action( 'add_meta_boxes', 'my_meta_boxes' );
function my_meta_boxes(){
    //Don't forget to change "post" with post_type where you want to add the metaboxes
    add_meta_box("propertybox", "Property Options", "propertybox", "listings", "normal", "high");
    add_meta_box("mansionbox", "Mansion Options", "mansionbox", "listings", "normal", "high");
 }

function propertybox(){
    global $prefix;
    global $property_fields;
   //Put here the fields you want display inside the "Property options" box.
    build_fieds($property_fields);
}

function mansionbox(){
    global $prefix;
    global $mansion_fields;

    build_fieds($mansion_fields);
}

function build_fieds($fields){
     global $post;

     echo '<table class="form-table">';

foreach ($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 class="theEditor" 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>',
        '<br />', $field['desc'];
            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');

// Save data from meta box
function mytheme_save_data($post_id) {

    global $mansion_fields;
    global $property_fields;

    // 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 ($property_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);
        }
     }

    foreach ($mansion_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 answer
    
I added the whole document where i have that code. thank you for helping me –  Bogdan Bătrânu Sep 2 '13 at 16:18
    
The answer I gave is correct then. Just define another metabox as you defined the previous and include the fields you want in each metabox. –  cybmeta Sep 2 '13 at 16:28
    
i tried, how you told me, if i got it right, and after i modified my code like above, it would not show the first propertybox –  Bogdan Bătrânu Sep 2 '13 at 16:37
    
I've edited my answer adapting your code. Try it and study the changes I made to learn how to do it. Just change the post type in the add_meta_box functions to fit your post type. –  cybmeta Sep 2 '13 at 17:34
    
thanks it is working as i want, but i get a error "Warning: call_user_func_array() expects parameter 1 to be a valid callback, function 'mytheme_add_box' not found or invalid function name in E:\xampp\htdocs\wordpress\wp-includes\plugin.php on line 406". I hope i will be able to add even more then 1, i should be able now after i have your example –  Bogdan Bătrânu Sep 4 '13 at 9:16
show 7 more comments

Your problem is that $meta_box = array( is used for both metaboxes, so the $meta_box variable is overriden by in the second assignation, and of course php understand you want to add one metabox, not two.

you have to do something like this:

$metaboxes = array();

$prefix = 'wtf_';

$metaboxes[] = array(
  'id' => 'propertybox',
  .. other settings here
);

$metaboxes[] = array(
  'id' => 'mansionbox',
  .. other settings here
);

foreach ( $metaboxes as $metabox ) {
  // put here the code you are using to add the metabox
}
share|improve this answer
    
I tried your way, at least i think i did what you told me, and i get " Parse error: syntax error, unexpected '=' in E:\xampp\htdocs\wordpress\.....php on line 4". –  Bogdan Bătrânu Sep 3 '13 at 14:49
    
@BogdanBătrânu In the code, (that was an exambe more than real code) I miss the semicolon (;). Try now. –  G. M. Sep 3 '13 at 18: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.