Kargano Posted September 14, 2021 Share Posted September 14, 2021 Hello all, I have for a customer site still an old WP template and have trouble converting from PHP 7 to PHP 8. I get the following error: Uncaught ArgumentCountError: Too few arguments to function . I was able to reduce the error to this PHP file. <?php // widget extra options global $theme_widgets_style; $theme_widgets_style = array( 'default' => __('sidebar default', THEME_NS), 'block' => __('block', THEME_NS), 'post' => __('post', THEME_NS), 'simple' => __('simple text', THEME_NS) ); function theme_get_widget_style($id, $style = null) { $result = theme_get_widget_meta_option($id, 'theme_widget_styles'); global $theme_widgets_style; if (!in_array($result, array_keys($theme_widgets_style))) { $result = 'default'; } if ($style != null) { if (!in_array($style, array('block', 'post', 'simple'))) { $style = 'block'; } if ($result == 'default') { $result = $style; } } return $result; } function theme_set_widget_style($id, $style) { global $theme_widgets_style; if (!in_array($style, array_keys($theme_widgets_style))) { $style = 'default'; } theme_set_widget_meta_option($id, 'theme_widget_styles', $style); } function theme_widget_expand_control($id) { global $wp_registered_widget_controls; $controls = &$wp_registered_widget_controls[$id]; if (!is_array($controls['params'])) { $controls['params'] = array($controls['params']); } $controls['params'][] = $id; if (isset($controls['callback'])) { $controls['callback_redirect'] = $controls['callback']; } $controls['callback'] = 'theme_widget_extra_control'; } function theme_update_widget_additional($instance) { global $theme_widget_meta_options; foreach ($theme_widget_meta_options as $value) { $id = theme_get_array_value($value, 'id'); $val = stripslashes(theme_get_array_value($_POST, $id)); $type = theme_get_array_value($value, 'type'); $options = theme_get_array_value($value, 'options'); switch ($type) { case 'checkbox': $val = ($val ? 1 : 0); break; case 'numeric': $val = (int) $val; break; case 'select': if (!in_array($val, array_keys($options))) { $val = reset(array_keys($options)); } break; } $instance[$id] = $val; } return $instance; } function theme_widget_process_control() { global $wp_registered_widget_controls; if ('post' == strtolower($_SERVER['REQUEST_METHOD']) && isset($_POST['widget-id'])) { theme_widget_expand_control($_POST['widget-id']); return; } foreach ($wp_registered_widget_controls as $id => $widget) { theme_widget_expand_control($id); } } function theme_widget_extra_control() { global $wp_registered_widget_controls, $theme_widgets_style, $theme_widget_meta_options; $_theme_widget_meta_options = $theme_widget_meta_options; $params = func_get_args(); $widget_id = $params[count($params) - 1]; // see theme_widget_expand_control func $widget_controls = theme_get_array_value($wp_registered_widget_controls, $widget_id, array()); if (isset($widget_controls['callback_redirect'])) { $callback = $widget_controls['callback_redirect']; if (is_callable($callback)) { call_user_func_array($callback, $params); } } if (!preg_match('/^(.*[^-])-([0-9]+)$/', $widget_id, $matches) || !isset($matches[1]) || !isset($matches[2])) { return false; } $id = $matches[1] . '-' . $params[0]['number']; ?> <h3 style="margin-bottom:3px;"><?php _e('Theme Options', THEME_NS); ?></h3> <?php theme_print_meta_box($id, $_theme_widget_meta_options); } // widgets class VMenuWidget extends WP_Widget { function VMenuWidget() { $widget_ops = array('classname' => 'vmenu', 'description' => __('Use this widget to add one of your custom menus as a widget.', THEME_NS)); parent::WP_Widget(false, __('Vertical Menu', THEME_NS), $widget_ops); } function widget($args, $instance) { extract($args); $title = apply_filters('widget_title', $instance['title'], $instance, $this->id_base); echo $before_widget; echo $before_title . $title . $after_title; echo theme_get_menu(array( 'source' => $instance['source'], 'depth' => theme_get_option('theme_vmenu_depth'), 'menu' => wp_get_nav_menu_object($instance['nav_menu']), 'class' => '' )); echo $after_widget; } function update($new_instance, $old_instance) { $instance['title'] = strip_tags($new_instance['title']); $instance['source'] = $new_instance['source']; $instance['nav_menu'] = (int) $new_instance['nav_menu']; return $instance; } function form($instance) { //Defaults $instance = wp_parse_args((array) $instance, array('title' => '', 'source' => 'Pages', 'nav_menu' => '')); $title = esc_attr($instance['title']); $source = $instance['source']; $nav_menu = $instance['nav_menu']; // Get menus $menus = get_terms('nav_menu', array('hide_empty' => false)); $sources = array( 'Pages' => __('Pages', THEME_NS), 'Categories' => __('Categories', THEME_NS), 'Custom Menu' => __('Custom Menu', THEME_NS) ); ?> <p> <label for="<?php echo $this->get_field_id('title'); ?>"><?php _e('Title:', THEME_NS) ?></label> <input type="text" class="widefat" id="<?php echo $this->get_field_id('title'); ?>" name="<?php echo $this->get_field_name('title'); ?>" value="<?php echo $title; ?>" /> </p> <p> <label for="<?php echo $this->get_field_id('source'); ?>"><?php echo __('Source', THEME_NS) . ':'; ?></label> <select class="widefat" id="<?php echo $this->get_field_id('source'); ?>" name="<?php echo $this->get_field_name('source'); ?>" onchange="var s = jQuery('.p-<?php echo $this->get_field_id('nav_menu'); ?>'); if (this.value == 'Custom Menu') s.show(); else s.hide();"> <?php foreach ($sources as $s => $t ) { $selected = ($source == $s ? ' selected="selected"' : ''); echo '<option' . $selected . ' value="' . $s . '">' . $t . '</option>'; } ?> </select> </p> <p class="p-<?php echo $this->get_field_id('nav_menu'); ?>" <?php if ($source !== 'Custom Menu') echo ' style="display:none"' ?>> <?php // If no menus exists, direct the user to go and create some. if (!$menus) { printf(__('No menus have been created yet. <a href="%s">Create some</a>.', THEME_NS), admin_url('nav-menus.php')); } else { ?> <label for="<?php echo $this->get_field_id('nav_menu'); ?>"><?php _e('Select Menu:', THEME_NS); ?></label><br /> <select class="widefat" 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> <?php } ?> </p> <?php } } class LoginWidget extends WP_Widget { function LoginWidget() { $widget_ops = array('classname' => 'login', 'description' => __('Login form', THEME_NS)); $this->WP_Widget(false, __('Login', THEME_NS), $widget_ops); } function widget($args, $instance) { global $user_ID, $user_identity, $user_level, $user_email, $user_login; extract($args); echo $before_widget; echo $before_title; if ($user_ID): echo $user_identity; echo $after_title; ?> <ul> <li><a href="<?php echo esc_url( site_url() ) ?>/wp-admin/"><?php _e('Dashboard', THEME_NS); ?></a></li> <?php if ($user_level >= 1): ?> <li><a href="<?php echo esc_url( site_url() ) ?>/wp-admin/post-new.php"><?php _e('Publish', THEME_NS); ?></a></li> <li><a href="<?php echo esc_url( site_url() ) ?>/wp-admin/edit-comments.php"><?php _e('Comments', THEME_NS); ?></a></li> <?php endif; ?> <li><a href="<?php echo wp_logout_url() ?>&redirect_to=<?php echo urlencode(theme_get_current_url()); ?>"><?php _e("Log out", THEME_NS); ?></a></li> </ul> <?php else: _e('Log In', THEME_NS); echo $after_title; ?> <form action="<?php echo esc_url( site_url() ) ?>/wp-login.php" method="post" name="login" id="form-login"> <fieldset class="input" style="border: 0 none;"> <p id="form-login-username"> <label for="log"><?php _e('Username', THEME_NS) ?></label> <br> <input type="text" name="log" id="log" value="<?php echo esc_attr(stripslashes($user_login), 1) ?>" size="20" /> </p> <p id="form-login-password"> <label for="pwd"><?php _e("Password", THEME_NS); ?></label> <br> <input type="password" name="pwd" id="pwd" size="20" /><br /> </p> <p id="form-login-remember"> <label for="rememberme"><?php _e('Remember Me', THEME_NS); ?></label> <input name="rememberme" id="rememberme" type="checkbox" checked="checked" value="forever" /> </p> <input class="art-button" type="submit" name="submit" value="<?php echo esc_attr(__('Log In', THEME_NS)); ?>" /> </fieldset> <input type="hidden" name="redirect_to" value="<?php echo theme_get_current_url(); ?>"/> </form> <ul> <?php if (get_option('users_can_register')) { ?> <li><a href="<?php echo esc_url( site_url() ) ?>/wp-register.php"><?php _e("Register", THEME_NS); ?></a></li> <?php } ?> <li><a href="<?php echo esc_url( site_url() ) ?>/wp-login.php?action=lostpassword"><?php _e("Lost your password?", THEME_NS); ?></a></li> </ul> <?php endif; echo $after_widget; } } // init widgets function artWidgetsInit() { register_widget('VMenuWidget'); register_widget('LoginWidget'); } add_action('widgets_init', 'artWidgetsInit'); I suspect the error is in these lines function form($instance) { //Defaults $instance = wp_parse_args((array) $instance, array('title' => '', 'source' => 'Pages', 'nav_menu' => '')); $title = esc_attr($instance['title']); $source = $instance['source']; $nav_menu = $instance['nav_menu']; Does anyone have a tip for me ? Or would tell me how much it costs to make it compatible? I have searched for quite a long time, but have not found anything. Best regards Kargano Quote Link to comment https://forums.phpfreaks.com/topic/313738-error-with-an-old-wordpress-template-upgrade-to-php-8/ Share on other sites More sharing options...
requinix Posted September 14, 2021 Share Posted September 14, 2021 The error is that some code is calling a function with the wrong number of arguments. The two function calls in the code you think seem to be correct. There should have been an exact filename and line number in the error for the calling code. That will tell you where to look. Then check what function(s) it's trying to call and why it's doing so incorrectly. Quote Link to comment https://forums.phpfreaks.com/topic/313738-error-with-an-old-wordpress-template-upgrade-to-php-8/#findComment-1589904 Share on other sites More sharing options...
Kargano Posted September 14, 2021 Author Share Posted September 14, 2021 (edited) Thanks for the answer. The problem is that the constructor gives an error. This is the whole error message. [06-Sep-2021 08:50:12 UTC] PHP Fatal error: Uncaught ArgumentCountError: Too few arguments to function WP_Widget::__construct(), 0 passed in /****/****.com/rebuild.****.com/wp-includes/class-wp-widget-factory.php on line 61 and at least 2 expected in /****/****.com/rebuild.****.com/wp-includes/class-wp-widget.php:162 Stack trace: #0 /****/****.com/rebuild.****.com/wp-includes/class-wp-widget-factory.php(61): WP_Widget->__construct() #1 /****/****.com/rebuild.****.com/wp-includes/widgets.php(115): WP_Widget_Factory->register('VMenuWidget') #2 /****/****.com/rebuild.****.com/wp-content/themes/oldtheme/library/widgets.php(255): register_widget('VMenuWidget') #3 /****/****.com/rebuild.****.com/wp-includes/class-wp-hook.php(303): artWidgetsInit('') #4 /****/****.com/rebuild.****.com/wp-includes/class-wp-hook.php(327): WP_Hook->apply_filters('', Array) #5 /****/****.com/rebuild.****.com/wp-includes/plugin.php(470): WP_Hook->do_action(Array) #6 /****/****.com/rebuild.****.com/wp-includes/widgets.php(1809): do_action('widgets_init') #7 /****/****.com/rebuild.****.com/wp-includes/class-wp-hook.php(303): wp_widgets_init('') #8 /****/****.com/rebuild.****.com/wp-includes/class-wp-hook.php(327): WP_Hook->apply_filters(NULL, Array) #9 /****/****.com/rebuild.****.com/wp-includes/plugin.php(470): WP_Hook->do_action(Array) #10 /****/****.com/rebuild.****.com/wp-settings.php(578): do_action('init') #11 /****/****.com/rebuild.****.com/wp-config.php(85): require_once('/home/httpd/vho...') #12 /****/****.com/rebuild.****.com/wp-load.php(50): require_once('/home/httpd/vho...') #13 /****/****.com/rebuild.****.com/wp-blog-header.php(13): require_once('/home/httpd/vho...') #14 /****/****.com/rebuild.****.com/index.php(17): require('/home/httpd/vho...') #15 {main} thrown in /****/****.com/rebuild.****.com/wp-includes/class-wp-widget.php on line 162 And when I rename the PHP file I have no error anymore. I have also found this Info https://www.php.net/manual/de/migration71.incompatible.php this was the reason for me to think the error was the line i posted. But thank you very much. Edited September 14, 2021 by Kargano Quote Link to comment https://forums.phpfreaks.com/topic/313738-error-with-an-old-wordpress-template-upgrade-to-php-8/#findComment-1589911 Share on other sites More sharing options...
requinix Posted September 14, 2021 Share Posted September 14, 2021 What version of WordPress are you using? Is it at least 5.6, which is when they added support for PHP 8? Quote Link to comment https://forums.phpfreaks.com/topic/313738-error-with-an-old-wordpress-template-upgrade-to-php-8/#findComment-1589912 Share on other sites More sharing options...
Kargano Posted September 14, 2021 Author Share Posted September 14, 2021 Yes, i use WP 5.8.1 and php 8.0.10 Yesterday it was 5.8 but the error is the same. Quote Link to comment https://forums.phpfreaks.com/topic/313738-error-with-an-old-wordpress-template-upgrade-to-php-8/#findComment-1589913 Share on other sites More sharing options...
requinix Posted September 14, 2021 Share Posted September 14, 2021 #2 /****/****.com/rebuild.****.com/wp-content/themes/oldtheme/library/widgets.php(255): register_widget('VMenuWidget') That code seems to be incorrect because VMenuWidget does not have a __construct which the WordPress documentation says it needs to have. See if there's an update to whatever theme to be compatible with recent WP versions. Quote Link to comment https://forums.phpfreaks.com/topic/313738-error-with-an-old-wordpress-template-upgrade-to-php-8/#findComment-1589916 Share on other sites More sharing options...
Kargano Posted September 15, 2021 Author Share Posted September 15, 2021 Yes i know. and there is no update. The widgets.php is the file i have postet the code on start of this topic. This was the reason that i think the error is on this. And it is only appear as soon i switch from php 7.4 to php 8 Quote Link to comment https://forums.phpfreaks.com/topic/313738-error-with-an-old-wordpress-template-upgrade-to-php-8/#findComment-1589920 Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.