Fatal error bij update naar PHP 8
Als ik PHP 8 activeer krijg ik onderstaande foutmelding:
Code (php)
1
2
3
2
3
Fatal error: Uncaught TypeError: call_user_func_array(): Argument #1 ($callback) must be a valid callback, non-static method Comment_Says_Custom_Text_Wrangler::comment_says_text() cannot be called statically in /home/vhosts/estrellaweb.nl/httpdocs/wp-includes/class-wp-hook.php:308 Stack trace: #0 /home/vhosts/estrellaweb.nl/httpdocs/wp-includes/plugin.php(205): WP_Hook->apply_filters('Nieuw bericht t...', Array) #1 /home/vhosts/estrellaweb.nl/httpdocs/wp-includes/l10n.php(199): apply_filters('gettext', 'Nieuw bericht t...', 'Add New Post', 'default') #2 /home/vhosts/estrellaweb.nl/httpdocs/wp-includes/l10n.php(299): translate('Add New Post', 'default') #3 /home/vhosts/estrellaweb.nl/httpdocs/wp-includes/class-wp-post-type.php(834): __('Add New Post') #4 /home/vhosts/estrellaweb.nl/httpdocs/wp-includes/post.php(1980): WP_Post_Type::get_default_labels() #5 /home/vhosts/estrellaweb.nl/httpdocs/wp-includes/class-wp-post-type.php(601): get_post_type_labels(Object(WP_Post_Type)) #6 /home/vhosts/estrellaweb.nl/httpdocs/wp-includes/class-wp-post-type.php(418): WP_Post_Type->set_props(Array) #7 /home/vhosts/estrellaweb.nl/httpdocs/wp-includes/post.php(1694): WP_Post_Type->__construct('post', Array) #8 /home/vhosts/estrellaweb.nl/httpdocs/wp-includes/post.php(43): register_post_type('post', Array) #9 /home/vhosts/estrellaweb.nl/httpdocs/wp-includes/class-wp-hook.php(308): create_initial_post_types('') #10 /home/vhosts/estrellaweb.nl/httpdocs/wp-includes/class-wp-hook.php(332): WP_Hook->apply_filters('', Array) #11 /home/vhosts/estrellaweb.nl/httpdocs/wp-includes/plugin.php(517): WP_Hook->do_action(Array) #12 /home/vhosts/estrellaweb.nl/httpdocs/wp-settings.php(617): do_action('init') #13 /home/vhosts/estrellaweb.nl/httpdocs/wp-config.php(76): require_once('/home/vhosts/es...') #14 /home/vhosts/estrellaweb.nl/httpdocs/wp-load.php(50): require_once('/home/vhosts/es...') #15 /home/vhosts/estrellaweb.nl/httpdocs/wp-blog-header.php(13): require_once('/home/vhosts/es...') #16 /home/vhosts/estrellaweb.nl/httpdocs/index.php(17): require('/home/vhosts/es...') #17 {main} thrown in /home/vhosts/estrellaweb.nl/httpdocs/wp-includes/class-wp-hook.php on line 308
Fatal error: Uncaught TypeError: call_user_func_array(): Argument #1 ($callback) must be a valid callback, non-static method Comment_Says_Custom_Text_Wrangler::comment_says_text() cannot be called statically in /home/vhosts/estrellaweb.nl/httpdocs/wp-includes/class-wp-hook.php:308 Stack trace: #0 /home/vhosts/estrellaweb.nl/httpdocs/wp-includes/plugin.php(205): WP_Hook->apply_filters('Fout is niet ve...', Array) #1 /home/vhosts/estrellaweb.nl/httpdocs/wp-includes/l10n.php(199): apply_filters('gettext', 'Fout is niet ve...', 'Error not cause...', 'default') #2 /home/vhosts/estrellaweb.nl/httpdocs/wp-includes/l10n.php(299): translate('Error not cause...', 'default') #3 /home/vhosts/estrellaweb.nl/httpdocs/wp-includes/class-wp-recovery-mode.php(173): __('Error not cause...') #4 /home/vhosts/estrellaweb.nl/httpdocs/wp-includes/class-wp-fatal-error-handler.php(53): WP_Recovery_Mode->handle_error(Array) #5 [internal function]: WP_Fatal_Error_Handler->handle() #6 {main} thrown in /home/vhosts/estrellaweb.nl/httpdocs/wp-includes/class-wp-hook.php on line 308
Fatal error: Uncaught TypeError: call_user_func_array(): Argument #1 ($callback) must be a valid callback, non-static method Comment_Says_Custom_Text_Wrangler::comment_says_text() cannot be called statically in /home/vhosts/estrellaweb.nl/httpdocs/wp-includes/class-wp-hook.php:308 Stack trace: #0 /home/vhosts/estrellaweb.nl/httpdocs/wp-includes/plugin.php(205): WP_Hook->apply_filters('Fout is niet ve...', Array) #1 /home/vhosts/estrellaweb.nl/httpdocs/wp-includes/l10n.php(199): apply_filters('gettext', 'Fout is niet ve...', 'Error not cause...', 'default') #2 /home/vhosts/estrellaweb.nl/httpdocs/wp-includes/l10n.php(299): translate('Error not cause...', 'default') #3 /home/vhosts/estrellaweb.nl/httpdocs/wp-includes/class-wp-recovery-mode.php(173): __('Error not cause...') #4 /home/vhosts/estrellaweb.nl/httpdocs/wp-includes/class-wp-fatal-error-handler.php(53): WP_Recovery_Mode->handle_error(Array) #5 [internal function]: WP_Fatal_Error_Handler->handle() #6 {main} thrown in /home/vhosts/estrellaweb.nl/httpdocs/wp-includes/class-wp-hook.php on line 308
Als ik WP_DEBUG inschakel (terwijl de server op PHP 7.4 draait) krijg ik deze foutmelding..
Quote:
Deprecated: Non-static method Comment_Says_Custom_Text_Wrangler::comment_says_text() should not be called statically in /home/vhosts/estrellaweb.nl/httpdocs/wp-includes/class-wp-hook.php on line 308
Die bewuste regel in class-wp-hook.php laat dit zien:
Dit gaf mij het idee dat het mis gaat met het aanroepen van de functies. Het stukje 'comment_says_text' komt ook voor in de functions.php van mijn thema, dat is deze functie:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
/* remove/change 'says' in comments // alchymyth 2011 */
class Comment_Says_Custom_Text_Wrangler {
function comment_says_text($translation, $text, $domain) {
$new_says = ' '; //whatever you want to have instead of 'says' in comments
$translations = &get_translations_for_domain( $domain );
if ( $text == '<cite class="fn">%s</cite> <span class="says">says:</span>' ) {
if($new_says) $new_says = ' '.$new_says; //compensate for the space character
return $translations->translate( '<cite class="fn">%s</cite><span class="says">'.$new_says.'</span>' );
} else {
return $translation; // standard text
}
}
class Comment_Says_Custom_Text_Wrangler {
function comment_says_text($translation, $text, $domain) {
$new_says = ' '; //whatever you want to have instead of 'says' in comments
$translations = &get_translations_for_domain( $domain );
if ( $text == '<cite class="fn">%s</cite> <span class="says">says:</span>' ) {
if($new_says) $new_says = ' '.$new_says; //compensate for the space character
return $translations->translate( '<cite class="fn">%s</cite><span class="says">'.$new_says.'</span>' );
} else {
return $translation; // standard text
}
}
Hier moet dus iets mis mee zijn, al heb ik geen idee of dit het enige is of niet.
Hoop heel erg dat iemand me hiermee kan helpen, want zelf kom ik er helaas niet uit.
Bij voorbaat dank!
Code (php)
1
2
2
class Comment_Says_Custom_Text_Wrangler {
function comment_says_text($translation, $text, $domain) {
function comment_says_text($translation, $text, $domain) {
in dit:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
Fatal error: Uncaught TypeError: call_user_func_array():
Argument #1 ($callback) must be a valid callback, non-static method Comment_Says_Custom_Text_Wrangler::comment_says_text() cannot be called statically in /home/vhosts/estrellaweb.nl/httpdocs/wp-includes/class-wp-hook.php:308
Stack trace:
#0 /home/vhosts/estrellaweb.nl/httpdocs/wp-includes/plugin.php(205):
WP_Hook->apply_filters('Nieuw bericht t...', Array)
#1 /home/vhosts/estrellaweb.nl/httpdocs/wp-includes/l10n.php(199):
apply_filters('gettext', 'Nieuw bericht t...', 'Add New Post', 'default')
#2 /home/vhosts/estrellaweb.nl/httpdocs/wp-includes/l10n.php(299):
translate('Add New Post', 'default')
#3 /home/vhosts/estrellaweb.nl/httpdocs/wp-includes/class-wp-post-type.php(834):
__('Add New Post') #4 /home/vhosts/estrellaweb.nl/httpdocs/wp-includes/post.php(1980): WP_Post_Type::get_default_labels() #5 /home/vhosts/estrellaweb.nl/httpdocs/wp-includes/class-wp-post-type.php(601): get_post_type_labels(Object(WP_Post_Type))
#6 /home/vhosts/estrellaweb.nl/httpdocs/wp-includes/class-wp-post-type.php(418):
WP_Post_Type->set_props(Array)
#7 /home/vhosts/estrellaweb.nl/httpdocs/wp-includes/post.php(1694):
WP_Post_Type->__construct('post', Array)
#8 /home/vhosts/estrellaweb.nl/httpdocs/wp-includes/post.php(43):
register_post_type('post', Array)
#9 /home/vhosts/estrellaweb.nl/httpdocs/wp-includes/class-wp-hook.php(308):
create_initial_post_types('')
#10 /home/vhosts/estrellaweb.nl/httpdocs/wp-includes/class-wp-hook.php(332):
WP_Hook->apply_filters('', Array)
#11 /home/vhosts/estrellaweb.nl/httpdocs/wp-includes/plugin.php(517):
WP_Hook->do_action(Array)
#12 /home/vhosts/estrellaweb.nl/httpdocs/wp-settings.php(617):
do_action('init')
#13 /home/vhosts/estrellaweb.nl/httpdocs/wp-config.php(76):
require_once('/home/vhosts/es...')
#14 /home/vhosts/estrellaweb.nl/httpdocs/wp-load.php(50):
require_once('/home/vhosts/es...')
#15 /home/vhosts/estrellaweb.nl/httpdocs/wp-blog-header.php(13):
require_once('/home/vhosts/es...')
#16 /home/vhosts/estrellaweb.nl/httpdocs/index.php(17):
require('/home/vhosts/es...')
#17 {main} thrown in /home/vhosts/estrellaweb.nl/httpdocs/wp-includes/class-wp-hook.php on line 308
---
Fatal error: Uncaught TypeError: call_user_func_array():
Argument #1 ($callback) must be a valid callback, non-static method Comment_Says_Custom_Text_Wrangler::comment_says_text() cannot be called statically in /home/vhosts/estrellaweb.nl/httpdocs/wp-includes/class-wp-hook.php:308
Stack trace:
#0 /home/vhosts/estrellaweb.nl/httpdocs/wp-includes/plugin.php(205):
WP_Hook->apply_filters('Fout is niet ve...', Array)
#1 /home/vhosts/estrellaweb.nl/httpdocs/wp-includes/l10n.php(199):
apply_filters('gettext', 'Fout is niet ve...', 'Error not cause...', 'default')
#2 /home/vhosts/estrellaweb.nl/httpdocs/wp-includes/l10n.php(299):
translate('Error not cause...', 'default')
#3 /home/vhosts/estrellaweb.nl/httpdocs/wp-includes/class-wp-recovery-mode.php(173):
__('Error not cause...')
#4 /home/vhosts/estrellaweb.nl/httpdocs/wp-includes/class-wp-fatal-error-handler.php(53):
WP_Recovery_Mode->handle_error(Array)
#5 [internal function]: WP_Fatal_Error_Handler->handle()
#6 {main} thrown in /home/vhosts/estrellaweb.nl/httpdocs/wp-includes/class-wp-hook.php on line 308
Argument #1 ($callback) must be a valid callback, non-static method Comment_Says_Custom_Text_Wrangler::comment_says_text() cannot be called statically in /home/vhosts/estrellaweb.nl/httpdocs/wp-includes/class-wp-hook.php:308
Stack trace:
#0 /home/vhosts/estrellaweb.nl/httpdocs/wp-includes/plugin.php(205):
WP_Hook->apply_filters('Nieuw bericht t...', Array)
#1 /home/vhosts/estrellaweb.nl/httpdocs/wp-includes/l10n.php(199):
apply_filters('gettext', 'Nieuw bericht t...', 'Add New Post', 'default')
#2 /home/vhosts/estrellaweb.nl/httpdocs/wp-includes/l10n.php(299):
translate('Add New Post', 'default')
#3 /home/vhosts/estrellaweb.nl/httpdocs/wp-includes/class-wp-post-type.php(834):
__('Add New Post') #4 /home/vhosts/estrellaweb.nl/httpdocs/wp-includes/post.php(1980): WP_Post_Type::get_default_labels() #5 /home/vhosts/estrellaweb.nl/httpdocs/wp-includes/class-wp-post-type.php(601): get_post_type_labels(Object(WP_Post_Type))
#6 /home/vhosts/estrellaweb.nl/httpdocs/wp-includes/class-wp-post-type.php(418):
WP_Post_Type->set_props(Array)
#7 /home/vhosts/estrellaweb.nl/httpdocs/wp-includes/post.php(1694):
WP_Post_Type->__construct('post', Array)
#8 /home/vhosts/estrellaweb.nl/httpdocs/wp-includes/post.php(43):
register_post_type('post', Array)
#9 /home/vhosts/estrellaweb.nl/httpdocs/wp-includes/class-wp-hook.php(308):
create_initial_post_types('')
#10 /home/vhosts/estrellaweb.nl/httpdocs/wp-includes/class-wp-hook.php(332):
WP_Hook->apply_filters('', Array)
#11 /home/vhosts/estrellaweb.nl/httpdocs/wp-includes/plugin.php(517):
WP_Hook->do_action(Array)
#12 /home/vhosts/estrellaweb.nl/httpdocs/wp-settings.php(617):
do_action('init')
#13 /home/vhosts/estrellaweb.nl/httpdocs/wp-config.php(76):
require_once('/home/vhosts/es...')
#14 /home/vhosts/estrellaweb.nl/httpdocs/wp-load.php(50):
require_once('/home/vhosts/es...')
#15 /home/vhosts/estrellaweb.nl/httpdocs/wp-blog-header.php(13):
require_once('/home/vhosts/es...')
#16 /home/vhosts/estrellaweb.nl/httpdocs/index.php(17):
require('/home/vhosts/es...')
#17 {main} thrown in /home/vhosts/estrellaweb.nl/httpdocs/wp-includes/class-wp-hook.php on line 308
---
Fatal error: Uncaught TypeError: call_user_func_array():
Argument #1 ($callback) must be a valid callback, non-static method Comment_Says_Custom_Text_Wrangler::comment_says_text() cannot be called statically in /home/vhosts/estrellaweb.nl/httpdocs/wp-includes/class-wp-hook.php:308
Stack trace:
#0 /home/vhosts/estrellaweb.nl/httpdocs/wp-includes/plugin.php(205):
WP_Hook->apply_filters('Fout is niet ve...', Array)
#1 /home/vhosts/estrellaweb.nl/httpdocs/wp-includes/l10n.php(199):
apply_filters('gettext', 'Fout is niet ve...', 'Error not cause...', 'default')
#2 /home/vhosts/estrellaweb.nl/httpdocs/wp-includes/l10n.php(299):
translate('Error not cause...', 'default')
#3 /home/vhosts/estrellaweb.nl/httpdocs/wp-includes/class-wp-recovery-mode.php(173):
__('Error not cause...')
#4 /home/vhosts/estrellaweb.nl/httpdocs/wp-includes/class-wp-fatal-error-handler.php(53):
WP_Recovery_Mode->handle_error(Array)
#5 [internal function]: WP_Fatal_Error_Handler->handle()
#6 {main} thrown in /home/vhosts/estrellaweb.nl/httpdocs/wp-includes/class-wp-hook.php on line 308
De traces zijn van twee verschillende situaties, zo op het eerste gezicht komt de tweede van een 'recovery mode' van Wordpress.
Het gaat fout bij het aanroepen van de functie waarvan je de code hebt gepost. Volgens SO is dit al een lang bestaande functie in Wordpress.
Deze functie wordt vanuit het thema op een manier aangeroepen die niet meer wordt ondersteund in PHP 8.
Het gaat fout in het bestand /home/vhosts/estrellaweb.nl/httpdocs/wp-includes/class-wp-hook.php op regel 308, daar wordt gebruik gemaakt van de PHP functie call_user_func_array(), om de functie van Wordpress te gebruiken. Echter wordt de functie 'statisch' aangeroepen, ofwel direct zonder dat de class (een blauwdruk) is gebruikt om een kopie te maken in het geheugen met eigen variabelen. Die manier van aanroepen lijkt niet meer ondersteund door de PHP functie.
Ik heb even wat geprobeerd op 3v4l.org:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
// set-up
class Comment_Says_Custom_Text_Wrangler {
function comment_says_text($translation, $text, $domain) { print "ok" . PHP_EOL; }
}
$class = new Comment_Says_Custom_Text_Wrangler;
$func = "comment_says_text";
$args = ["us-en", "hello", ""]; // vul maar wat in
// werkt
call_user_func_array([$class, $func], $args);
// Jouw situatie, werkt niet (meer)
call_user_func_array("Comment_Says_Custom_Text_Wrangler::comment_says_text", $args);
?>
// set-up
class Comment_Says_Custom_Text_Wrangler {
function comment_says_text($translation, $text, $domain) { print "ok" . PHP_EOL; }
}
$class = new Comment_Says_Custom_Text_Wrangler;
$func = "comment_says_text";
$args = ["us-en", "hello", ""]; // vul maar wat in
// werkt
call_user_func_array([$class, $func], $args);
// Jouw situatie, werkt niet (meer)
call_user_func_array("Comment_Says_Custom_Text_Wrangler::comment_says_text", $args);
?>
En als je de oplossing van Jan gebruikt, lost dat de foutmelding op. (Hij was me net voor :-) )
Daarna kreeg ik nog wel een melding over forced SSL, die heb ik weg gekregen door de regel define( 'FORCE_SSL_ADMIN', true ); in het wp-config bestand een paar regels naar boven te verschuiven. Mijn site werkt nu weer foutloos gelukkig! Bizar dat één zo'n stomme functie de boel om zeep kan helpen. :)
Gewijzigd op 19/11/2022 18:15:16 door Ester Dammers
Die regel over forced SSL moet je in ieder geval niet weglaten, het laatste dat je wilt is dat je zonder HTTPS (dus zonder versleutelde verbinding) de inloggegevens over een netwerk stuurt. Want dan kan iedereen je wachtwoord mee lezen.
Ik weet niet wat het effect precies is van het naar boven schuiven, maar let er bij het inloggen bij de 'admin' pagina's er op dat je wel een slotje hebt in de adresbalk van de browser, zoals je gewoonlijk ook hebt bij internetbankieren en zo.
Ik had het via Google gevonden, dat omhoog verplaatsen van dat regeltje. Weglaten leek me inderdaad ook niet erg verstandig. :) Als ik inlog op het admin gedeelte heb ik nog gewoon het slotje staan gelukkig!