トイレのうず

WordPressをPHP 8系にしたらいろいろエラーが出たのでプラグインを修正した

当記事はアフィリエイト広告を掲載しています。

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 でエラーが発生した時の対応

上記の記事ではプラグインを削除して対応しています。それでもいいですが、ここまで修正したのでどうにか動作するように調べてみました。

→ WPML : WPML All Import and PHP 8 – Fatal error: Uncaught TypeError: call_user_func_array when importing products

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 が値を摂ってきてくれないのは本当になぞ。

関連記事

WordPress の Ktai Style を PHP 7 で動作するように修正した
WordPress
thumbnail
PHP 7.2 で External Featured Image Pro が Warning を吐くのを修正
WordPress
thumbnail
いろいろと検討中
WordPress
thumbnail
Smart Update Pinger の改変に泣く
WordPressMac
thumbnail
PHP: Fatal error: Allowed memory size of XXXXX bytes exhausted. が出た
WordPress
thumbnail
ハッスルサーバーが PHP5 に対応する!
WordPressWeb制作
thumbnail