WordPress を PHP 8.1 系で動かそうとしたら、いろいろエラーが出たのでひとつずつ修正しました。 Photo Express for Google 、 Similar Posts 、 Ktai Style といった古いプラグインもできる範囲で動くようにしました。
目次
WordPress の PHP を 8.1 系にしようとしたきっかけ
WordPress を 6.6 にアップデートして、プラグインもアップデートしていたら Simple GA 4 Ranking も新しいバージョンが出ているようなので手動でアップデートしました。
→ GitHub : simple-ga4-ranking
Composer detected issues in your platform: Your Composer dependencies require a PHP version ">= 8.1.0".
しかし PHP 8.1 以上が条件らしく上記エラーが出て画面が表示されなかったので、 WordPress を動かしているサーバーの PHP を 8.1 系にすることにしました。 8.1 系にしたのは、レンタルサーバーの推奨が 8.1 系だったからです。
まずローカル環境の MAMP をアップグレードして 6.9 にして PHP 8.1 系を使えるようにしました。そして主に古いプラグインにてエラーがたくさん出たのでそれを潰していきました。
Photo Express for Google
Google フォトの写真を表示させるために使っています。 API の提供が終わったのでもう貼りつけはできませんが。
external-featured-image-pro/class-photo-renderer.php 1129 行目あたり
Warning: Undefined variable $peg_single_image_size_crop in /xxxx/wp-content/plugins/photo-express-for-google/class-photo-renderer.php on line 1129
配列の存在しないキーを呼び出すと PHP 8 からエラーになるようになったようです。 isset()
で存在しているか確かめてから呼び出しするようにします。
→ IRODORI DESIGN :【 PHP エラー】 Warning: Undefined array key の解決方法
class-photo-renderer.php 1129 行目あたり
変更前:
if($peg_single_image_size_crop === '-c'){
$crop = true;
} else {
$crop = false;
}
変更後:
if( isset($peg_single_image_size_crop) ) {
if($peg_single_image_size_crop === '-c'){
$crop = true;
} else {
$crop = false;
}
} else {
$crop = false;
}
Post-Plugin Library
Similar Posts を使うために必要なプラグインです。これも修正方法は前項と同じです。
post-plugin-library/common_functions.php 69 行目ほか
Warning: Undefined array key "just_current_post" in /xxxx/wp-content/plugins/post-plugin-library/common_functions.php on line 69
69 行目
変更前:
if (!isset($arg['just_current_post'])) $arg['just_current_post'] = $options['just_current_post'];
変更後:
if (!isset($arg['just_current_post']) && isset($options['just_current_post'])) $arg['just_current_post'] = $options['just_current_post'];
97 行目
変更前:
if (!isset($arg['date_modified'])) $arg['date_modified'] = $options['date_modified'];
変更後:
if (!isset($arg['date_modified']) && isset($options['date_modified'])) $arg['date_modified'] = $options['date_modified'];
102 行目
変更前:
if (!isset($arg['group_by'])) $arg['group_by'] = $options['group_by'];
変更後:
if (!isset($arg['group_by']) && isset($options['group_by'])) $arg['group_by'] = $options['group_by'];
105 行目
変更前:
if (!isset($arg['show_type'])) $arg['show_type'] = $options['show_type'];
変更後:
if (!isset($arg['show_type']) && isset($options['show_type'])) $arg['show_type'] = $options['show_type'];
107 行目
変更前:
if (!isset($arg['no_author_comments'])) $arg['no_author_comments'] = $options['no_author_comments'];
変更後:
if (!isset($arg['no_author_comments']) && isset($options['no_author_comments'])) $arg['no_author_comments'] = $options['no_author_comments'];
109 行目
変更前:
if (!isset($arg['no_user_comments'])) $arg['no_user_comments'] = $options['no_user_comments'];
変更後:
if (!isset($arg['no_user_comments']) && isset($options['no_user_comments'])) $arg['no_user_comments'] = $options['no_user_comments'];
111 行目
変更前:
if (!isset($arg['unique'])) $arg['unique'] = $options['unique'];
変更後:
if (!isset($arg['unique']) && isset($options['unique'])) $arg['unique'] = $options['unique'];
115 行目
変更前:
if (!isset($arg['combine'])) $arg['combine'] = $options['crossmatch'];
変更後:
if (!isset($arg['combine']) && isset($options['crossmatch'])) $arg['combine'] = $options['crossmatch'];
125 行目
変更前:
if (!isset($arg['orderby'])) $arg['orderby'] = stripslashes($options['orderby']);
変更後:
if (!isset($arg['orderby']) && isset($options['orderby'])) $arg['orderby'] = stripslashes($options['orderby']);
127 行目
変更前:
if (!isset($arg['orderby_order'])) $arg['orderby_order'] = $options['orderby_order'];
変更後:
if (!isset($arg['orderby_order']) && isset($options['orderby_order'])) $arg['orderby_order'] = $options['orderby_order'];
129 行目
変更前:
if (!isset($arg['orderby_case'])) $arg['orderby_case'] = $options['orderby_case'];
変更後:
if (!isset($arg['orderby_case']) && isset($options['orderby_case'])) $arg['orderby_case'] = $options['orderby_case'];
149 〜 156 行目
変更前:
$arg['exclude_users'] = $options['exclude_users'];
$arg['count_home'] = $options['count_home'];
$arg['count_feed'] = $options['count_feed'];
$arg['count_single'] = $options['count_single'];
$arg['count_archive'] = $options['count_archive'];
$arg['count_category'] = $options['count_category'];
$arg['count_page'] = $options['count_page'];
$arg['count_search'] = $options['count_search'];
変更後:
if (isset($options['exclude_users'])) $arg['exclude_users'] = $options['exclude_users'];
if (isset($options['count_home'])) $arg['count_home'] = $options['count_home'];
if (isset($options['count_feed'])) $arg['count_feed'] = $options['count_feed'];
if (isset($options['count_single'])) $arg['count_single'] = $options['count_single'];
if (isset($options['count_archive'])) $arg['count_archive'] = $options['count_archive'];
if (isset($options['count_category'])) $arg['count_category'] = $options['count_category'];
if (isset($options['count_page'])) $arg['count_page'] = $options['count_page'];
if (isset($options['count_search'])) $arg['count_search'] = $options['count_search'];
176 行目あたり
変更前:
foreach ($matches[1] as $match) {
list($tag, $ext) = explode(':', $match, 2);
$action = output_tag_action($tag);
if (function_exists($action)) {
// store the action that instantiates the tag
$translations['acts'][] = $action;
// add the tag in a form ready to use in translation later
$translations['fulltags'][] = '{'.$match.'}';
// the extra data if any
$translations['exts'][] = $ext;
}
}
変更後:
foreach ($matches[1] as $match) {
$arrmatch = explode(':', $match, 2);
if (isset($arrmatch[0])): $tag = $arrmatch[0]; else: $tag = ""; endif;
if (isset($arrmatch[1])): $ext = $arrmatch[1]; else: $ext = ""; endif;
$action = output_tag_action($tag);
if (function_exists($action)) {
// store the action that instantiates the tag
$translations['acts'][] = $action;
// add the tag in a form ready to use in translation later
$translations['fulltags'][] = '{'.$match.'}';
// the extra data if any
$translations['exts'][] = $ext;
}
}
Similar Posts
関連記事を表示するプラグインです。
similar-posts/similar-posts.php 27 行目あたり
Warning: Constant POST_PLUGIN_LIBRARY already defined in /xxxx/wp-content/plugins/similar-posts/similar-posts.php on line 27
2 重に定義していることが原因のようです。
→週末プログラマの開発日記: Constant *** already defined を解消する
27 行目
変更前:
define ('POST_PLUGIN_LIBRARY', true);
変更後:
if( ! defined( 'POST_PLUGIN_LIBRARY' ) ){
define ('POST_PLUGIN_LIBRARY', true);
}
Ktai Style
フューチャーフォン(ガラケー)でも表示されるようにするプラグインです。ほとんど表示されていないと思いますが、 i モードが 2026 年 3 月 31 日まで使えるようなので一応対応しておきました。
PHP 7 系にしたときに修正た記事は下記です。それにつけ加えて変更しました。
ktai-style/ktai_style.php 117 行目あたり
Fatal error: Uncaught Error: Non-static method KtaiServices::get() cannot be called statically in /xxxx/wp-content/plugins/ktai-style/ktai_style.php:117 Stack trace: #0 /xxxx/wp-content/plugins/ktai-style/ktai_style.php(215): KtaiStyle->get('pcview_enabled') #1 /xxxx/wp-includes/class-wp-hook.php(324): KtaiStyle->determine_pcview('') #2 /xxxx/wp-includes/class-wp-hook.php(348): WP_Hook->apply_filters(NULL, Array) #3 /xxxx/wp-includes/plugin.php(517): WP_Hook->do_action(Array) #4 /xxxx/wp-settings.php(555): do_action('plugins_loaded') #5 /xxxx/wp-config.php(104): require_once('/...') #6 /xxxx/wp-load.php(50): require_once('/...') #7 /xxxx/wp-admin/admin.php(34): require_once('/...') #8 /xxxx/wp-admin/plugins.php(10): require_once('/...') #9 {main} thrown in /xxxx/wp-content/plugins/ktai-style/ktai_style.php on line 117
static にしていないメソッドを呼び出せないので、モデルのインスタンスを作ってから呼び出すといいようです。
→ Qiita :[Laravel]Non-static method のエラーの対応方法
117 行目あたり
変更前:
default:
if (! $this->ktai) {
return KtaiServices::get($key);
}
変更後:
default:
if (! $this->ktai) {
$ktaiservices = new KtaiServices();
return $ktaiservices->get($key);
}
ktai-style/operators/base.php 141 行目あたり
Fatal error: Uncaught ArgumentCountError: Too few arguments to function KtaiServices::__construct(), 0 passed in /xxxx/wp-content/plugins/ktai-style/ktai_style.php on line 118 and exactly 1 expected in /xxxx/wp-content/plugins/ktai-style/operators/base.php:141 Stack trace: #0 /xxxx/wp-content/plugins/ktai-style/ktai_style.php(118): KtaiServices->__construct() #1 /xxxx/wp-content/plugins/ktai-style/ktai_style.php(217): KtaiStyle->get('pcview_enabled') #2 /xxxx/wp-includes/class-wp-hook.php(324): KtaiStyle->determine_pcview('') #3 /xxxx/wp-includes/class-wp-hook.php(348): WP_Hook->apply_filters(NULL, Array) #4 /xxxx/wp-includes/plugin.php(517): WP_Hook->do_action(Array) #5 /xxxx/wp-settings.php(555): do_action('plugins_loaded') #6 /xxxx/wp-config.php(104): require_once('/...') #7 /xxxx/wp-load.php(50): require_once('/...') #8 /xxxx/wp-admin/admin.php(34): require_once('/...') #9 /xxxx/wp-admin/plugins.php(10): require_once('/...') #10 {main} thrown in /xxxx/wp-content/plugins/ktai-style/operators/base.php on line 141
141 行目あたり
変更前:
public function __construct($user_agent) {
変更後:
public function __construct($user_agent = 1) {
ktai-style/ktai_style.php 949 行目あたり
Fatal error: Uncaught Error: Non-static method KtaiStyle::get_option() cannot be called statically in /xxxx/wp-content/plugins/ktai-style/ktai_style.php:949 Stack trace: #0 /xxxx/wp-content/plugins/ktai-style/operators/base.php(147): ks_option('ks_theme') #1 /xxxx/wp-content/plugins/ktai-style/ktai_style.php(118): KtaiServices->__construct() #2 /xxxx/wp-content/plugins/ktai-style/ktai_style.php(217): KtaiStyle->get('pcview_enabled') #3 /xxxx/wp-includes/class-wp-hook.php(324): KtaiStyle->determine_pcview('') #4 /xxxx/wp-includes/class-wp-hook.php(348): WP_Hook->apply_filters(NULL, Array) #5 /xxxx/wp-includes/plugin.php(517): WP_Hook->do_action(Array) #6 /xxxx/wp-settings.php(555): do_action('plugins_loaded') #7 /xxxx/wp-config.php(104): require_once('/...') #8 /xxxx/wp-load.php(50): require_once('/...') #9 /xxxx/wp-admin/admin.php(34): require_once('/...') #10 /xxxx/wp-admin/plugins.php(10): require_once('/...') #11 {main} thrown in /xxxx/wp-content/plugins/ktai-style/ktai_style.php on line 949
949 行目あたり
変更前:
function ks_option($name) {
return KtaiStyle::get_option($name);
}
変更後:
function ks_option($name) {
$ktaistyle = new KtaiStyle();
return $ktaistyle->get_option($name);
}
ktai-style/config/panel.php 20 行目あたり
Warning: Undefined array key "page" in /xxxx/wp-content/plugins/ktai-style/config/panel.php on line 20
20 行目あたり
変更前:
if ( $_GET['page'] == self::THEME_OPTIONS ) {
remove_action('setup_theme', 'preview_theme');
add_action('setup_theme', array('KtaiThemes', 'preview_theme'));
}
変更後:
if ( isset($_GET['page']) ){
if ( $_GET['page'] == self::THEME_OPTIONS ) {
remove_action('setup_theme', 'preview_theme');
add_action('setup_theme', array('KtaiThemes', 'preview_theme'));
}
}
ktai-style/operators/base.php 2010 行目あたり、 2435 行目あたり
Fatal error: Uncaught TypeError: call_user_func_array(): Argument #1 ($callback) must be a valid callback, non-static method KtaiServices::convert_pict() cannot be called statically in /xxxx/wp-includes/class-wp-hook.php:324 Stack trace: #0 /xxxx/wp-includes/plugin.php(205): WP_Hook->apply_filters('\xE9\x9B\xA8\xE6\x88\xB8\xEF\xBC\x88\xE3\x82\xB7...', Array) #1 /xxxx/wp-includes/post-template.php(256): apply_filters('the_content', '\xE9\x9B\xA8\xE6\x88\xB8\xEF\xBC\x88\xE3\x82\xB7\xE3\x83\xA3...') #2 /xxxx/wp-content/themes/1010uzu3/single.php(7): the_content() #3 /xxxx/wp-includes/template-loader.php(106): include('/...') #4 /xxxx/wp-blog-header.php(19): require_once('/...') #5 /index.php(17): require('/...') #6 {main} thrown in /xxxx/wp-includes/class-wp-hook.php on line 324
このエラーが一番対応が難儀しました。「 class-wp-hook.php on line 324
」とありますが、 Ktai Style を無効化するとエラーが表示されなくなるので、原因は Ktai Style です。
→ IT エンジニアのアウトプット備忘録:【備忘録】 PHP のバージョンアップで WordPress でエラーが発生した時の対応
上記の記事ではプラグインを削除して対応しています。それでもいいですが、ここまで修正したのでどうにか動作するように調べてみました。
ktai_style.php
604 行目を以下のようにコメントアウトすると表示されます。
//add_filter('the_content', array('KtaiServices', 'convert_pict'));
メゾットを static
にしたりしてみましたが、他にエラーがたくさん出るので諦めて Ktai Style で表示しているときのみ動作するようにしました。
ktai_style.php 604 行目あたり
変更前:
add_filter('the_content', array('KtaiServices', 'convert_pict'));
add_filter('get_comment_text', array('KtaiServices', 'convert_pict'));
変更後:
if( is_ktai() ){
add_filter('the_content', array('KtaiServices', 'convert_pict'));
add_filter('get_comment_text', array('KtaiServices', 'convert_pict'));
}
ktai-style/inc/template-tags.php 41 行目あたり
Fatal error: Uncaught TypeError: count(): Argument #1 ($value) must be of type Countable|array, string given in /xxxx/wp-content/plugins/ktai-style/inc/template-tags.php:41 Stack trace: #0 /xxxx/wp-content/plugins/ktai-style/inc/template-tags.php(618): _ks_parse_arg(Array, Array) #1 /xxxx/wp-content/plugins/ktai-style/themes/redportal/page.php(7): ks_content('(more...)') #2 /xxxx/wp-content/plugins/ktai-style/ktai_style.php(532): include('/Volumes/2NDSSD...') #3 /xxxx/wp-includes/class-wp-hook.php(324): KtaiStyle->output('') #4 /xxxx/wp-includes/class-wp-hook.php(348): WP_Hook->apply_filters(NULL, Array) #5 /xxxx/wp-includes/plugin.php(517): WP_Hook->do_action(Array) #6 /xxxx/wp-includes/template-loader.php(13): do_action('template_redire...') #7 /xxxx/wp-blog-header.php(19): require_once('/Volumes/2NDSSD...') #8 /Volumes/2NDSSDM2/MAMP/htdocs/theme.1010uzu.com/index.php(17): require('/Volumes/2NDSSD...') #9 {main} thrown in /xxxx/wp-content/plugins/ktai-style/inc/template-tags.php on line 41
→ php : count
value
の要素の数を返します。 PHP 8.0.0 より前のバージョンでは、 パラメータが配列でもなく Countable インターフェイスを 実装したオブジェクトでもない場合、1
が返されていました。 ただし、value
がnull
の場合、 0 が返されていました。
inc/template-tags.php 41 行目あたり
変更前:
} elseif (is_string($arg) && count($arg) == 1 && preg_match('/^\w+=/', $arg) && strpos($arg, ' ') === false) { // query striing
変更後:
} elseif (is_string($arg) && is_string($arg) == 1 && preg_match('/^\w+=/', $arg) && strpos($arg, ' ') === false) { // query striing
$arg は文字列のようなので、文字列かどうか判断するようにしました。
ktai-style/inc/shrinkage.php 96 行目あたり
Warning: Undefined array key "port" in /xxxx/wp-content/plugins/ktai-style/inc/shrinkage.php on line 96
96 行目あたり
変更前:
$this->url_host = $url_parts['scheme'] . '://' . $url_parts['host'] . ($url_parts['port'] ? ':' . $url_parts['port'] : '');
変更後:
if(isset($url_parts['port'])){
$this->url_host = $url_parts['scheme'] . '://' . $url_parts['host'] . ($url_parts['port'] ? ':' . $url_parts['port'] : '');
}
ktai-style/inc/shrinkage.php 1062 行目あたり、 1077 行目あたり
Warning: Undefined array key 1 in /xxxx/wp-content/plugins/ktai-style/inc/shrinkage.php on line 1062
Warning: Undefined array key 1 in /xxxx/wp-content/plugins/ktai-style/inc/shrinkage.php on line 1077
配列の 2 つ目がないので、あるかどうか確認し、なかったらからの文字列を代入しています。
1062 行目あたり、 1077 行目あたり
変更前:
list($before, $after) = explode(',', $s[2][0]);
変更後:
$arrmatch = explode(',', $s[2][0]);
if (isset($arrmatch[0])): $before = $arrmatch[0]; else: $before = ""; endif;
if (isset($arrmatch[1])): $after = $arrmatch[1]; else: $after = ""; endif;
ktai-style/inc/template-tags.php 3 行目あたり
Warning: Undefined array key 0 in /xxxx/wp-content/plugins/ktai-style/inc/template-tags.php on line 31
31 行目あたり
変更前:
$arg = $func_get_args[0];
変更後:
if( isset($func_get_args[0]) ){
$arg = $func_get_args[0];
} else {
$arg = "";
}
ktai-style/inc/template-tags.php 551 行目あたり
Warning: Undefined array key "logo_html" in /xxxx/wp-content/plugins/ktai-style/inc/template-tags.php on line 551
551 行目あたり
変更前:
} elseif ($r['logo_html']) {
変更後:
} elseif (!empty($r['logo_html'])) {
ktai-style/inc/template-tags.php 1241 行目あたり
Fatal error: Uncaught Error: Non-static method KtaiStyle::strip_host() cannot be called statically in /xxxx/wp-content/plugins/ktai-style/inc/template-tags.php:1241 Stack trace: #0 /xxxx/wp-content/plugins/ktai-style/themes/redportal/home.php(20): ks_next_posts_link('\xE3\x82\x82\xE3\x81\xA3\xE3\x81\xA8\xE8\xA6\x8B\xE3\x82\x8B') #1 /xxxx/wp-content/plugins/ktai-style/ktai_style.php(532): include('/Volumes/2NDSSD...') #2 /xxxx/wp-includes/class-wp-hook.php(324): KtaiStyle->output('') #3 /xxxx/wp-includes/class-wp-hook.php(348): WP_Hook->apply_filters(NULL, Array) #4 /xxxx/wp-includes/plugin.php(517): WP_Hook->do_action(Array) #5 /xxxx/wp-includes/template-loader.php(13): do_action('template_redire...') #6 /xxxx/wp-blog-header.php(19): require_once('/Volumes/2NDSSD...') #7 /Volumes/2NDSSDM2/MAMP/htdocs/theme.1010uzu.com/index.php(17): require('/Volumes/2NDSSD...') #8 {main} thrown in /xxxx/wp-content/plugins/ktai-style/inc/template-tags.php on line 1241
1241 行目あたり
変更前:
$output = '' .
preg_replace('/&([^#])(?![a-z]{1,8};)/', '&$1', $r['anchor']) .'';
変更後:
$ktaistyle = new KtaiStyle();
$output = '' .
preg_replace('/&([^#])(?![a-z]{1,8};)/', '&$1', $r['anchor']) .'';
ktai-style/inc/kses.php 300 行目あたり
Warning: Undefined variable $allowed_protocols in /xxxx/wp-content/plugins/ktai-style/inc/kses.php on line 300
変更前:
$arreach['value'] = self::kses_bad_protocol($arreach['value'], $allowed_protocols);
変更後:
if(!isset($allowed_protocols)){
$allowed_protocols = "";
}
$arreach['value'] = self::kses_bad_protocol($arreach['value'], $allowed_protocols);
ktai-style/inc/kses.php 299 行目あたり
Warning: Undefined array key "type" in /xxxx/wp-content/plugins/ktai-style/inc/kses.php on line 299
変更前:
if ('y' != $arreach['vless'] && 'uri' == $current['type']) {
if(!isset($allowed_protocols)){
$allowed_protocols = "";
}
$arreach['value'] = self::kses_bad_protocol($arreach['value'], $allowed_protocols);
$arreach['whole'] = sprintf('%s="%s"', $arreach['name'], $arreach['value']);
}
変更後:
if(isset($current['type'])){
if ('y' != $arreach['vless'] && 'uri' == $current['type']) {
if(!isset($allowed_protocols)){
$allowed_protocols = "";
}
$arreach['value'] = self::kses_bad_protocol($arreach['value'], $allowed_protocols);
$arreach['whole'] = sprintf('%s="%s"', $arreach['name'], $arreach['value']);
}
}
ktai-style/inc/shrinkage.php 485 行目あたり
Warning: Undefined variable $class in /xxxx/wp-content/plugins/ktai-style/inc/shrinkage.php on line 485
変更前:
if ( preg_match($this->pconly_site_regex, $class) || $this->none_mobile_sites($url) ) {
$pconly_html = '&' . self::PCONLY_SITE_CLASS . '=true';
} else {
$pconly_html = '';
}
変更後:
if(isset($class)){
if ( preg_match($this->pconly_site_regex, $class) || $this->none_mobile_sites($url) ) {
$pconly_html = '&' . self::PCONLY_SITE_CLASS . '=true';
} else {
$pconly_html = '';
}
}
ktai-style/inc/shrinkage.php 494 行目あたり
Warning: Undefined variable $pconly_html in /xxxx/wp-content/plugins/ktai-style/inc/shrinkage.php on line 494
変更前:
$link_html = $icon . sprintf('%s', ks_plugin_url(KTAI_NOT_ECHO), KtaiStyle::INCLUDES_DIR, esc_attr($nonce), $pconly_html, rawurlencode($url), $class, $style, $colored_anchor);
変更後:
if(!isset($pconly_html)){
$pconly_html = "";
}
$link_html = $icon . sprintf('%s', ks_plugin_url(KTAI_NOT_ECHO), KtaiStyle::INCLUDES_DIR, esc_attr($nonce), $pconly_html, rawurlencode($url), $class, $style, $colored_anchor);
ktai-style/inc/shrinkage.php 621 行目あたり
Warning: Undefined variable $thumb_url in /xxxx/wp-content/plugins/ktai-style/inc/shrinkage.php on line 621
変更前:
} elseif ($this->image_inline && $thumb_url) {
変更後:
} elseif ($this->image_inline && !empty($thumb_url)) {
ktai-style/inc/shrinkage.php 632 行目あたり
Warning: Undefined variable $thumb_url in /xxxx/wp-content/plugins/ktai-style/inc/shrinkage.php on line 632
変更前:
} elseif ($thumb_path && $thumb_url) { // link to a thumbnail
変更後:
} elseif ($thumb_path && !empty($thumb_url)) { // link to a thumbnail
wp-config.php 本番サーバーにて
ローカル環境で動作するようになったので、本番サーバーに適用したらまたエラーが出たので修正しました。
wp-config.php on line 41 行目あたり
Warning: Constant ABSPATH already defined in /xxxx/wp-config.php on line 41
変更前:
define('ABSPATH', dirname(__FILE__).'/');
require_once(ABSPATH.'wp-settings.php');
変更後:
if ( !defined('ABSPATH') )
define('ABSPATH', dirname(__FILE__).'/');
require_once(ABSPATH.'wp-settings.php');
Ktai Style 本番サーバーにて
ktai-style/themes/redportal/functions.php 2 行目あたり
Fatal error: Uncaught Error: Undefined constant "‘wp_head’" in /xxxx/wp-content/plugins/ktai-style/themes/redportal/functions.php:4 Stack trace: #0 /xxxx/wp-content/plugins/ktai-style/inc/theme.php(211): include() #1 /xxxx/wp-includes/class-wp-hook.php(324): KtaiThemes->load_theme_function('') #2 /xxxx/wp-includes/class-wp-hook.php(348): WP_Hook->apply_filters(NULL, Array) #3 /xxxx/wp-includes/plugin.php(517): WP_Hook->do_action(Array) #4 /xxxx/wp-settings.php(630): do_action('setup_theme') #5 /xxxx/wp-config.php(50): require_once('/home/yyyy/101...') #6 /xxxx/wp-load.php(50): require_once('/home/yyyy/101...') #7 /xxxx/wp-blog-header.php(13): require_once('/home/yyyy/101...') #8 /home/yyyy/1010uzu.com/public_html/index.php(17): require('/home/yyyy/101...') #9 {main} thrown in /xxxx/wp-content/plugins/ktai-style/themes/redportal/functions.php on line 4
エラーログは 4 行目と出ていますが、 ktai-style/inc/template-tags.php
は 3 行しかなく原因がわからずかなり悩みました。 wp_head が定義されていないといわれていますが、 Ktai Style では ks_head
が使われているし、 Ktai Style で functions.php
になにかさせることはないので、たったひとつの関数をコメントアウトしたら動くようになりました。
変更前:
load_theme_textdomain('redportal', dirname(__FILE__));
変更後:
//load_theme_textdomain('redportal', dirname(__FILE__));
→けーちゃんの個人サイト: WordPress: load_theme_textdomain() と load_plugin_textdomain() 関数を少し詳しく解説してみる
load_theme_textdomain()
はテーマの翻訳を読み込む関数のようです。
ktai-style/inc/template-tags.php 339 行目あたり
Fatal error: Uncaught Error: Non-static method KtaiStyle_Admin::get_sid() cannot be called statically in /xxxx/wp-content/plugins/ktai-style/inc/template-tags.php:339 Stack trace: #0 /xxxx/wp-content/plugins/ktai-style/inc/template-tags.php(278): ks_get_logout_url() #1 /xxxx/wp-content/plugins/ktai-style/themes/redportal/footer.php(26): ks_login_link('') #2 /xxxx/wp-includes/template.php(810): require_once('/home/yyyy/101...') #3 /xxxx/wp-content/plugins/ktai-style/inc/theme.php(481): load_template('/home/yyyy/101...') #4 /xxxx/wp-content/plugins/ktai-style/inc/theme.php(574): KtaiThemes->get_footer() #5 /xxxx/wp-content/plugins/ktai-style/themes/redportal/page.php(14): ks_footer() #6 /xxxx/wp-content/plugins/ktai-style/ktai_style.php(532): include('/home/yyyy/101...') #7 /xxxx/wp-includes/class-wp-hook.php(324): KtaiStyle->output('') #8 /xxxx/wp-includes/class-wp-hook.php(348): WP_Hook->apply_filters(NULL, Array) #9 /xxxx/wp-includes/plugin.php(517): WP_Hook->do_action(Array) #10 /xxxx/wp-includes/template-loader.php(13): do_action('template_redire...') #11 /xxxx/wp-blog-header.php(19): require_once('/home/yyyy/101...') #12 /home/yyyy/1010uzu.com/public_html/index.php(17): require('/home/yyyy/101...') #13 {main} thrown in /xxxx/wp-content/plugins/ktai-style/inc/template-tags.php on line 339
変更前:
$redirect = '&' . KtaiStyle_Admin::SESSION_NAME . '=' . KtaiStyle_Admin::get_sid() . $redirect;
変更後:
$ktaistyle_admin = new KtaiStyle_Admin();
$redirect = '&' . KtaiStyle_Admin::SESSION_NAME . '=' . $ktaistyle_admin->get_sid() . $redirect;
あとは自作のプラグインと function.php
を同じような感じで変更しました。サーバーにも反映して無事に PHP 8.1 系で動くようになりました。しかし肝心の Simple GA 4 Ranking が値を取ってきてくれなくなってしまったので、人気記事が表示されなくなってしまいました。とりあえずテーマに静的にランキングを表示してレイアウトはそれっぽくなるようにしておきました。 Simple GA 4 Ranking が値を摂ってきてくれないのは本当になぞ。