Maison > Questions et réponses > le corps du texte
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粉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.