web-dev-qa-db-de.com

Wie behebt man Warning: call_user_func_array ()?

Ich habe mein Theme metabox.php an meine Bedürfnisse angepasst und habe diesen Fehler bekommen

Blockquote-Warnung: call_user_func_array () erwartet, dass Parameter 1 ein gültiger Rückruf, die Funktion 'mytheme_add_box' nicht gefunden oder ein ungültiger Funktionsname in E:\xampp\htdocs\wordpress\wp-includes\plugin.php in Zeile 406 Blockquote ist

Wie kann ich es reparieren ?

Dies ist mein alter 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);
        }
    }
}

?>

Und das ist mein neuer 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);
       }
     }
}
?>
1

Ich bin mir nicht sicher, ob das helfen wird, aber nachdem ich in den letzten 2 Tagen genau dieselbe Fehlermeldung erhalten habe, habe ich endlich herausgefunden, was passiert ist. Es musste lediglich versucht werden, die Funktion aufzurufen, bevor das System wusste, dass sie existiert.

In meinem Fall hatte ich die Funktion in ein separates - nicht öffentlich zugängliches - Verzeichnis geschrieben und versucht, diese Funktion in meiner functions.php -Datei aufzurufen, bevor ich überhaupt die Datei einfügte, die die Funktion enthielt.

In meiner custom_funcs.php Datei war diese Funktion:

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

In meiner functions.php-Datei habe ich Folgendes ausgeführt:

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

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

Sobald ich ihre Reihenfolge geändert habe ...

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

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

... der Fehler ist komplett gestoppt.

Hoffentlich hilft und erspart dies jemandem zwei Tage beim Debuggen.

Zuletzt lesen die Posts hier , was mich dazu veranlasst hat, die Änderung vorzunehmen.

3
DaveyJake