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:xampphtdocswordpresswp-includesplugin.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);
}
}
}
?>
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:Inside of my
functions.php
file, I was doing this:Once I changed their order to this…
…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.