如何修复警告:CALL_USER_FUNC_ARRAY()?

时间:2013-09-05 作者:Bogdan Bătrânu

我修改了我的主题元盒。php来满足我的需要,我得到了这个

Blockquote警告:call\\u user\\u func\\u array()要求参数1为有效回调,在E:\\xampp\\htdocs\\wordpress\\wp includes\\plugin中找不到函数“mytheme\\u add\\u box”,或函数名无效。php第406行Blockquote

我怎样才能修复它?

这是我的旧metabox代码

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

?>
这是我的新代码

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

1 个回复
SO网友:DaveyJake

不确定这是否会有帮助,但在过去2天处理了完全相同的错误消息后,我终于知道发生了什么。It was simply a matter of attempting to call the function before the system knew it existed.

在我的例子中,我在一个单独的目录中编写了该函数,该目录不可公开访问,并试图在functions.php 文件之前,我甚至包括了包含函数的文件。

在我的内部custom_funcs.php 文件是此函数:

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;
}
在我的functions.php 文件,我正在这样做:

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

// Load Custom Functions
include( \'/my/non-public/path/custom_funcs.php\' );
一旦我把他们的订单改成这个。。。

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

// get the funk
add_filter( \'plugins_url\', \'my_custom_funk\' );
。。。错误完全停止。

希望这能帮助并节省一些人两天的调试时间。

最后,帖子内容如下here 是什么引导我做出改变。

结束

相关推荐

Functions.php中的帖子ID错误

我试图在我的函数中执行以下代码。php更改我的wordpress博客的标题。function filter_pagetitle($url) { global $wp_query; $the_post_id = $wp_query->post->ID; $the_post_data = get_post($the_post_id); return $the_post_da