Last Viewed Posts:プラグインのエラーを修正して最新のwordrepss(5.4.1)でも使えるようにする
Tag: Last Viewed Posts
見たページを記憶するプラグイン「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にちゃんと値が入ってれば消えます。
- Category: Works , WordPress , Plugins
- Tag: Last Viewed Posts
ちょうど困っていたところだったので、大変助かりました!
ありがとうございます。
ただせっかく表示はされるようになったのですが、
商品詳細ページに設置をしておりまして、クッキーからそれぞれのサムネイルが表示されるはずが、
それぞれの詳細ページの同一ページのサムネイルのみが表示されるおかしな現象がでてしまいました。
この設定とはまた別の問題でしょうか・・。
お知恵をお貸しいただけると大変たすかります。
コメントありがとうございます。
このプラグインはサムネイルの出力が無いのでおそらくご自身で追加した部分かと思います。
もしよろしければその部分のソースを書いてもらえますか?
こちらで試してみます。
>あつおさま
welcartのフォーラムの方でも質問に対してご回答いただきました。
ご親切にありがとうございます!
サムネイル部分はこちらのページを参考にさせていただきました。
https://mo-ja.net/welcartlastviewedpost/
ソースはこちらです。
お手数をおかけしてしまいすみません。大変助かります。
tsujita様
サムネイルの件ですが、画像呼び出しタグに設定されてる$postが原因ですね。
に書き換えてみてください。
$valu+0の+0はなんの意味かわかりませんが、このプラグインの書き方に合わせてみました。
でも問題ないと思います。
$postはグローバル変数で、この関数内で$postに何も設定されていないのが原因ですね。
参考のサイトでも
という記述がありますので確認してみてください。
あともう1点
です。
>あつお さま
早々にありがとうございます。$postが原因だったのですね。
お教えいただいた方法を試したところ無事に表示することができました。
勉強になります。ありがとうございます!