2021年3月18日木曜日

Contact Form 7 version 5.4 以降 動かなくなった Contact Form 7 add confirm プラグイン(Contact Form 7 に確認を追加する)を動作させるには

 筆者自身は、「上記内容で間違いありません」のチェックボックスを設けるぐらいで回避したり、Googleフォームも確認がないので利用はしていませんでした。

でもこの「Contact Form 7 add confirm」プラグインについては、WordPress勉強会か WordCampのコントリビューターディか忘れましたが、そうした場所で「開発したー」というのを聞いた記憶が朧気ながらあるのです。まぁそれを証明するものがないので漠然とした記憶だけです。

まぁともあれ、Contact Form 7 のバージョン5.4 から動作しなくなったという情報が、ちらほら目につくようになりました。

これについて、サポートフォーラムで修正方法が掲載されたので備忘録をこめてメモしておきます。


対処方法


Contact Form 7アップデートでContact Form 7 add confirmが効かない(WordPress.org 日本語版サポートフォーラム)

にあるように、

plugins\contact-form-7-add-confirm\includes\js\scripts.js

223行目と 226行目の、event.detail.idevent.detail.unitTag に変更すれば動くというものです。

変更前


変更後


ということですね。

実際に手持ちの WordPress 5.7 + PHP 8.0.0 でも動作することを確認しました。

2021年3月18日 @kimipooh

2021年3月5日金曜日

MAMP 上の WordPress で PHPキャッシュ「APCu」モジュールを有効にしてみよう!

MAMP 6.3 から PHP 8.0 をサポートするようになりました。

ローカル環境として、いくつかのツールを併用しており、MAMPはその一つです。

MAMP上の WordPress は最近とても動作が遅くなってきました。そのため、パフォーマンスを改善するための PHPキャッシュをつかいたいと思うようになったので、設定したメモを備忘録として残しておきます。

準備と条件


次のことを前提としています。
  1. macOS であること(検証したOSは macOS 10.15.7)
  2. MAMP 6.3がインストールされていること
  3. MAMP上にWordPressをインストールして動く状態(管理ダッシュボードにログインえきる)
MAMP無料版では、PHPバージョンの選択は2つまでです。
したがって、
  • /Applications/MAMP/bin/php
にある PHPフォルダのうち、2つ以外は別フォルダへ移動しておいてください。そうすることで、選択したい PHPバージョンにできます。たとえば、php8.0.0と php5.6.40 だけのフォルダを残せば、下図のようにその2つのバージョンを選択できるようになります。


STEP 1. PHPキャッシュ APCu モジュールを有効化する


MAMPのデフォルトでは、 APCu モジュールは有効になっていません。
これを有効化するには、 php.ini の変更が必要です。MAMP上では、php.ini はバージョンごとに別フォルダで用意されています。MAMPの php 8.0.0 の場合、
  • /Applications/MAMP/bin/php/php8.0.0/conf/php.ini
になります。

このファイルにある
  • ;extension=apcu.so
の先頭のコメントを外してください。
  • extension=apcu.so
そして、MAMPのサービスを終了して、再度起動しなおします。
ターミナルアプリより
  • /Applications/MAMP/bin/php/php8.0.0/bin/php -m
を入力してEnterすることで、PHPで利用できるモジュール一覧が出てきます。
その中に apcu が存在すれば、APCu モジュールが有効になっているということになります。

STEP 2. WordPress で有効化


*注意:下記で紹介する WP-FFPC プラグイン 1.11.2 (2021年3月5日時点)は、そのままでは PHP 8.0.0 では動作しません。

WP-FFPC プラグイン 1.11.2 (2021年3月5日時点)を利用する場合には、
を参考に、プラグインソースの変更が必要です。変更しなければ PHP 8.0ではサイトがエラーでアクセスできなくなります。したがって事前にFTP接続などサイトのWordPressファイルを直接いじることができるようにしておくのがよいです。

MAMPのようなローカル環境ならサイトエラーが出てから、上記リンク先を参考にプラグインのソース・ファイルを後から修正することで対応は可能です。

しかし本番環境では、
  • https://wordpress.org/plugins/wp-ffpc/
より WP-FFPCプラグインをダウンロードし、FTP経由でプラグインをインストールし、問題の箇所を修正するのがよいでしょう。

また一時的な措置としては構いませんが、プラグインが更新されたときに変更した部分が上書きされて、サイトがエラーでとまってしまうリスクがあります。したがって、PHP 8.0で利用する場合には、本番用では対応するまで使わないほうがよいでしょう。

プラグインを有効化できたら、設定 > WP-FFPCより、APCu を選択して保存すれば有効になります。


ローカル環境だとそれでいいですが、本番環境だとキャッシュの期限を調整するとよいと思います。


2021年3月5日 @kimipooh

WordPress プラグイン「WP-FFPC」を PHP 8.0で動かす!

 WordPress で PHPキャッシュ(APCu等)を有効化するプラグイン「WP-FFPC」ですが、PHP 8.0 ではエラーがでてサイトが止まってしまいます。PHP 7.4 では動きます。PHP の APCu モジュールは、さくらインターネットのレンタルサーバー等、APCu モジュールが使える PHPで有効化するとサイトのパフォーマンスがかなり上がる無くてはならないものです。それが PHP 8.0になるとサイトが止まってしまうのは大問題です。

そこで WP-FFPC 1.11.2 (2021年3月5日時点)を修正して問題を解決してみました!その備忘録をまとめておきます。

PHP 8.0.0 上で、WP-FFPCをインストールすると・・・


有効化するまえに、下記のエラーでサイトが止まります。

これらを参考にソースコードをチェックした結果、下記の赤文字の部分の問題があることがわかりました。どのような問題かは後述します。

wp-ffpc-class.php
1016-1018行目

public function plugin_options_migrate( &$options ) {

if ( version_compare ( $options['version'], $this->plugin_version, '<' )  ) {


問題を解決する方法


この 1017行目に
if($options === false) $options = array('version' => '0.0');
を追加することで本問題を回避できます。
実際には、下記の青のコードを追加するということです。
	public function plugin_options_migrate( &$options ) {
		if($options === false) $options = array('version' => '0.0');
		if ( version_compare ( $options['version'], $this->plugin_version, '<' )  ) {

原因の説明


これはプログラムのバグです。
wp-ffpc-abstract.php
514行目から
public static function _get_option ( $optionID, $network = false ) {
if ( $network ) {
static::debug ( sprintf( __( '- getting network option %s', 'PluginUtils' ), $optionID ) );
$options = get_site_option( $optionID );
}
else {
static::debug( sprintf( __( ' – getting option %s', 'PluginUtils' ), $optionID ));
$options = get_option( $optionID );
}

return $options;
}
において、 戻り値の $options は、false (bool値), 配列等いくつかのパターンがあり、最初にインストールするときに、WP-FFPCの設定が WordPressで利用するデータベースに存在しないことから、$options の値が false (bool値)となります。

そうすると、下記の $options['version'] が存在しないことになり (falseとなる)、version_compare の第1引数が false になります。しかし、version_compare は引数に string を期待しているため、型の不一致が起こります。PHP 8.0からはそうした場合にはエラーになるということです。

wp-ffpc-class.php
1016-1018行目

public function plugin_options_migrate( &$options ) {

if ( version_compare ( $options['version'], $this->plugin_version, '<' )  ) {


このバージョンチェックは、WP-FFPCプラグインのバージョンが、インストール前のバージョンよりも新しければというチェックをしています。つまりプラグインが更新したときの処理でしょう。そのため、初期値を 0.0 にすることで、最初にインストールしたときには、必ずこのチェックが真になるように、下記のように比較前にコードを追加してあげればよいです。
if($options === false) $options = array('version' => '0.0');

これでエラー無く動くので、あとは一度でも WP-FFPCの設定を保存すれば、以後は $options が false になることはないはずです。

開発者の GitHUBに ISSUEとしてあげておきました。

さらに WordPress.org のプラグインサポートのほうにも投稿

修正されることを祈っておきます!

付録A) APCu キャッシュを有効にできる他のプラグイン等について


なかなか思うようなプラグインには出会えず。

  • Power Cacheプラグイン: https://ja.wordpress.org/plugins/powered-cache/
    • ドロップインに追加されるが、エラーがでてしまっている。wp-content/object-cache.php → wp-content/plugins/object-cache.php  へシンボリックリンクを張れば動く。



  • APC Object Cache Backendプラグイン:https://wordpress.org/plugins/apc/
    • PHP 8.0では重大なエラーがでて有効化できず

付録B)  Deprecated: contextual_help の使用はバージョン 3.3.0 から非推奨になっています ! への対応


作成:2021年3月8日

Deprecated: contextual_help の使用はバージョン 3.3.0 から非推奨になっています ! 代わりに get_current_screen()->add_help_tab(), get_current_screen()->remove_help_tab() を使ってください。 in /****/wp-includes/functions.php on line 5234

これは、wp-admin/ 以下の管理画面の上部にヘルプタブに追加する機能のようです。
が使い方が書かれていますが、結構修正は大変のように見えます。
これなくても機能としては問題ないため

wp-ffpc-class.php
 add_filter('contextual_help', array( &$this, 'plugin_admin_nginx_help' ), 10, 2);
//  add_filter('contextual_help', array( &$this, 'plugin_admin_nginx_help' ), 10, 2);

wp-ffpc-abstract.php
 add_filter('contextual_help', array( &$this, 'plugin_admin_help' ), 10, 2);
// add_filter('contextual_help', array( &$this, 'plugin_admin_help' ), 10, 2);

とコメントして無効化しておけば、とりあえず問題なさそうですね。


2021年3月5日 @kimipooh
2021年3月8日 付録2) を追記