Maison  >  Questions et réponses  >  le corps du texte

Appel à une fonction non définie create_function()

J'ai reçu ce message sur la page d'accueil du site :

Erreur fatale : erreur non détectée : appel à la fonction non définie create_function() dans /customers/7/e/7/jovobytes.be/httpd.www/wp-content/themes/inovado/framework/inc/widgets/custommenu. php:67 Trace de pile : #0 /customers/7/e/7/jovobytes.be/httpd.www/wp-content/themes/inovado/functions.php(39) : include_once() #1 /customers/7/ e/7/jovobytes.be/httpd.www/wp-settings.php(566): include('/customers/7/e/...') #2 /customers/7/e/7/jovobytes.be /httpd.www/wp-config.php(96): require_once('/customers/7/e/...') #3 /customers/7/e/7/jovobytes.be/httpd.www/wp- load.php(50) : require_once('/customers/7/e/...') #4 /customers/7/e/7/jovobytes.be/httpd.www/wp-blog-header.php(13 ): require_once('/customers/7/e/...') #5 /customers/7/e/7/jovobytes.be/httpd.www/index.php(17): require('/customers/7 /e/...') #6 {main} lancé dans /customers/7/e/7/jovobytes.be/httpd.www/wp-content/themes/inovado/framework/inc/widgets/custommenu.php Aller à la ligne 67

J'ai donc recherché les fichiers correspondant au thème et j'ai dû réécrire le code pour être compatible avec PHP 8.0. Toute aide serait grandement appréciée ! ! !

<?php


class WP_Nav_Menu_Widget_Desc extends WP_Widget {

    function __construct() {
        parent::WP_Widget(false, 'minti.SideNav', array('description' => 'Display a Side Navigation'));

    }

    function widget($args, $instance) {
        // Get menu
        $nav_menu = wp_get_nav_menu_object( $instance['nav_menu'] );

        if ( !$nav_menu )
            return;

        echo $args['before_widget'];

        //if ( !empty($instance['title']) )
        //  echo $args['before_title'] . $instance['title'] . $args['after_title'];

        wp_nav_menu( array( 'depth' => 1, 'menu' => $nav_menu ) );

        echo $args['after_widget'];
    }

    function update( $new_instance, $old_instance ) {
        $instance['nav_menu'] = (int) $new_instance['nav_menu'];
        return $instance;
    }

    function form( $instance ) {
        $nav_menu = isset( $instance['nav_menu'] ) ? $instance['nav_menu'] : '';

        // Get menus
        $menus = get_terms( 'nav_menu', array( 'hide_empty' => false ) );

        // If no menus exists, direct the user to go and create some.
        if ( !$menus ) {
            echo '<p>'. sprintf( __('No menus have been created yet. <a href="%s">Create some</a>.'), admin_url('nav-menus.php') ) .'</p>';
            return;
        }
        ?>
        <p>
            <label for="<?php echo $this->get_field_id('nav_menu'); ?>"><?php _e('Select Menu:'); ?></label>
            <select id="<?php echo $this->get_field_id('nav_menu'); ?>" name="<?php echo $this->get_field_name('nav_menu'); ?>">
        <?php
            foreach ( $menus as $menu ) {
                $selected = $nav_menu == $menu->term_id ? ' selected="selected"' : '';
                echo '<option'. $selected .' value="'. $menu->term_id .'">'. $menu->name .'</option>';
            }
        ?>
            </select>
        </p>
        <?php
    }
}
add_action('widgets_init', create_function('', 'return register_widget("WP_Nav_Menu_Widget_Desc");'));
?>


P粉198670603P粉198670603307 Il y a quelques jours768

répondre à tous(1)je répondrai

  • P粉921130067

    P粉9211300672023-11-17 11:33:44

    Cette opération très spécifique peut être réécrite ainsi :

    add_action(
        'widgets_init',
        function() {
            register_widget("WP_Nav_Menu_Widget_Desc");
        }
    );

    Cependant, le widget lui-même utilise une syntaxe de constructeur à l'ancienne, elle doit donc également être modifiée.

    class WP_Nav_Menu_Widget_Desc extends WP_Widget {
    
        function __construct() {
            parent::__construct(false, 'minti.SideNav', array('description' => 'Display a Side Navigation'));
        }
    }
    

    Cela fait un moment que je n'ai pas vu la syntaxe des constructeurs, donc je ne serais pas surpris si davantage de code est également cassé. Vous devriez vraiment envisager de mettre à niveau votre thème/plugin vers une version plus récente ou de ne pas mettre à niveau votre version PHP.

    répondre
    0
  • Annulerrépondre