Secura Vita

Post: 2020/05/08

Last Viewed Posts:プラグインのエラーを修正して最新のwordrepss(5.4.1)でも使えるようにする

カテゴリー: WorksWordPressPlugins
B!

見たページを記憶するプラグイン「Last Viewed Posts」を使ってたサイトがあり、そのwordrepssをアップデートするという仕事があったのですが最近更新されてないこともあってエラーがでてしまいました。

Last Viewed Posts – WordPress plugin | WordPress.org

見たページをクッキーに記憶させるという、割と単純なプラグインなので自作しても良かったのですが、このプラグインありきのサイト構築してたのと期間や費用の関係でプラグインファイルを修正することにしました。

数カ所書き換えるだけでOKですので困ってる方がいればお試しください。

執筆時バージョン:wordrepss5.4.1・プラグインver0.7.3

管理画面

修正するファイルは、プラグインディレクトリ内の「last_viewed_posts.php」です。

WP_DEBUGをtrueにしてエラーを潰していってください。

WP_DEBUGはwp-config.phpに書きます。

define('WP_DEBUG', true);
↓
define('WP_DEBUG', false);

WordPressでのデバッグ – WordPress Codex 日本語版

管理画面に出るエラーは多分WP_DEBUGをfalseにしてればスルーされるエラーだと思います。

あと、削除しても「使用停止中のウィジェット」から出ないのはそのままにしてます。
なんかデータ残ってんのかな?

エラー1

precated: register_sidebar_widget の使用はバージョン 2.8.0 から非推奨になっています ! 代わりに wp_register_sidebar_widget() を使ってください。 

Deprecated: register_widget_control の使用はバージョン 2.8.0 から非推奨になっています ! 代わりに wp_register_widget_control() を使ってください。

修正箇所は最下部にある関数「zg_lwp_init」を書き換えます。

function zg_lwp_init() { // Widget init
	if ( !function_exists('register_sidebar_widget') )
		return;
	register_sidebar_widget('Last Viewed Posts','zg_lwp_widget');
	register_widget_control('Last Viewed Posts','zg_lwp_widget_control', 250, 100);
}

↓

function zg_lwp_init() { // Widget init
	if ( !function_exists('wp_register_sidebar_widget') )
		return;
	wp_register_sidebar_widget('last-viewed-posts','Last Viewed Posts','zg_lwp_widget');
	wp_register_widget_control('last-viewed-posts','Last Viewed Posts','zg_lwp_widget_control');
}

register_sidebar_widget→wp_register_sidebar_widget、register_widget_control→wp_register_widget_controlに書き換えただけですが引数も変わってますのでご注意を。

wp_register_sidebar_widget() | Function | WordPress Developer Resources

wp_register_widget_control() | Function | WordPress Developer Resources

エラー2

ウィジェットを登録すると出るエラーです。

Notice: Undefined index: lwp-submit

Deprecated: attribute_escape の使用はバージョン 2.8.0 から非推奨になっています ! 代わりに esc_attr() を使ってください。

1つ目のエラーは単純に「lwp-submit」が見つからないというエラーなのでそれを回避します。

関数「zg_lwp_widget_control」にあります。

if ( $_POST['lwp-submit'] ) {
	$newoptions['title'] = strip_tags(stripslashes($_POST['lwp-title']));
}

↓

if ( isset($_POST['lwp-submit']) && $_POST['lwp-submit'] ) {
	$newoptions['title'] = strip_tags(stripslashes($_POST['lwp-title']));
}

2つ目のエラーは非推奨のタグを書き換えるだけです。

これも関数「zg_lwp_widget_control」にあります。

$title = attribute_escape( $options['title'] );

↓

$title = esc_attr( $options['title'] );

WEBサイト上の表示

エラー1

Warning: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead

これはPHP7で起きるエラーみたいです。

preg_replaceじゃなくてpreg_replace_callbackを使えってことみたいです。

これは表示部分とクッキー処理部分の2箇所にありますのでお忘れなく。

関数は「zg_lw_setcookie」と「zg_recently_viewed」です。

違いは値を返す変数名が違うくらいです。

zg_lw_setcookie()

$zg_cookiearray = unserialize(preg_replace('!s:(\d+):"(.*?)";!e', "'s:'.strlen('$2').':\"$2\";'", stripslashes($_COOKIE["WP-LastViewedPosts"]))); // Read serialized array from cooke and unserialize it

↓

$str = stripslashes( $_COOKIE["WP-LastViewedPosts"] );
$str = preg_replace_callback( '!s:(\d+):"(.*?)";!',
	function( $m ) {
		return "'s:'.strlen('{$m[2]}').':\"{$m[2]}\";'";
	},
	$str );
$zg_cookiearray = unserialize( $str );

zg_recently_viewed()

$zg_post_IDs = unserialize(preg_replace('!s:(\d+):"(.*?)";!e', "'s:'.strlen('$2').':\"$2\";'", stripslashes($_COOKIE["WP-LastViewedPosts"]))); // Read serialized array from cooke and unserialize it

↓

$str = stripslashes( $_COOKIE["WP-LastViewedPosts"] );
$str = preg_replace_callback( '!s:(\d+):"(.*?)";!',
	function( $m ) {
		return "'s:'.strlen('{$m[2]}').':\"{$m[2]}\";'";
	},
	$str );
$zg_post_IDs = unserialize( $str );

エラー2

Invalid argument supplied for foreach() in

これは上の処理でエラーが回避され、$zg_post_IDsにちゃんと値が入ってれば消えます。

B!
Homeに戻る
モバイルバージョンを終了