php - Call to undefined function create_function()
I get this message on the front page of my website:
Fatal error: Uncaught Error: Call to undefined function create_function() in /customers/7/e/7/jovobytes.be/httpd.www/wp-content/themes/inovado/framework/inc/widgets/custommenu.php:67 Stack trace: #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} thrown in /customers/7/e/7/jovobytes.be/httpd.www/wp-content/themes/inovado/framework/inc/widgets/custommenu.php on line 67
so i looked up the corresponding file of the theme and need to rewrite the code so it's compatible with php 8.0. Any help would be appreceated !!!
<?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");'));
?>
Answer
Solution:
That very specific action can be rewritten as:
add_action(
'widgets_init',
function() {
register_widget("WP_Nav_Menu_Widget_Desc");
}
);
However, the widget itself uses the older style constructor syntax, so that needs to be changed, too.
class WP_Nav_Menu_Widget_Desc extends WP_Widget {
function __construct() {
parent::__construct(false, 'minti.SideNav', array('description' => 'Display a Side Navigation'));
}
}
Its been a while since I've seen that constructor syntax, so I wouldn't be surprised if more of this code is broken, too. You really should consider either upgrading the theme/plugin to a newer version, or not upgrading your PHP version
Answer
Solution:
My solution:
if (!function_exists('create_function'))
{
$FAUTO_NUM=1;
function create_function($pars, $code)
{ global $FAUTO_NUM;
$FAUTO_NUM++;
$fid=$FAUTO_NUM;
$str="function fauto$fid($pars) { $code };";
eval($str);
return "fauto".$fid;
};
};
Source