1

I modified my theme metabox.php to fit my needs, and I got this eror

Blockquote 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 Blockquote

How can i fix it ?

This is my old metabox 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);
        }
    }
}

?>

And this is my new code

<?php
$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);
       }
     }
}
?>
  • call_user_func_array() is calling this mytheme_add_box function but cant find on your script – codepixlabs Sep 5 '13 at 9:39
  • i understand that, what i don't understand is why is calling that function because in my new code i am not using mytheme_add_box. – Bogdan Bătrânu Sep 5 '13 at 9:43
  • yes thats kind of weird are you sure you executed script only after saving it ? – codepixlabs Sep 5 '13 at 9:50
  • Yes, because if i use my old code i am not getting that error and my property listing details and mansion listings details appear as one. Could it be because of an plug in ? – Bogdan Bătrânu Sep 5 '13 at 9:59
  • 1
    Try to search for mytheme_add_box in all your theme/plugin files. mytheme_add_box is obviously called from some where but not from the code you posted – cybmeta Sep 5 '13 at 11:30
2

Not sure this will help but after dealing with the exact same error message for the last 2 days I finally figured out what was happening. It was simply a matter of attempting to call the function before the system knew it existed.

In my case, I had written the function in a separate--not-publicly-accessible--directory and attempted to call this function in my functions.php file before I even included the file that contained the function.

Inside my custom_funcs.php file was this function:

function my_custom_funk($url, $path = '', $plugin = '') {
    $host = get_this_cust_url( $url );
    $url = str_replace( parse_url( WP_PLUGIN_URL, PHP_URL_HOST ), $host, $url );
    return $url;
}

Inside of my functions.php file, I was doing this:

// get the funk
add_filter( 'plugins_url', 'my_custom_funk' );

// Load Custom Functions
include( '/my/non-public/path/custom_funcs.php' );

Once I changed their order to this...

// Load Custom Functions
include( '/my/non-public/path/custom_funcs.php' );

// get the funk
add_filter( 'plugins_url', 'my_custom_funk' );

...the error completely stopped.

Hopefully this helps and saves someone two days of debugging.

Lastly, the posts read here are what lead me to make the change.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

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