wordpressのchocolatテーマをphp8.0で動かすには

php7.4 -> php8.0にすると「このサイトで重大なエラーが発生しました」となり表示できない。

wp-content/themes/chocolat/functions.php ファイルの 2154 行目で発生しました。 エラーメッセージ: Uncaught Error: Call to undefined function create_function() in /foo/bar/wp-content/themes/chocolat/functions.php:2154

create_functionが使えなくなったようだ。無名関数に変更するとのこと。

--- functions-sv20260524.php    2021-02-17 19:40:44.239139747 +0900
+++ functions.php       2026-05-24 15:00:38.803726595 +0900
@@ -433,7 +433,7 @@
        $comment_cnt = 0;
        $comments = get_approved_comments( $id );
        foreach ( $comments as $comment ) {
-               if ( $comment->comment_type === '' ) {
+               if ( $comment->comment_type === '' || $comment->comment_type === 'comment') {
                        $comment_cnt++;
                }
        }
@@ -2151,7 +2151,7 @@
 <?php
        }
 }
-add_action( 'widgets_init', create_function( '', 'return register_widget( "Chocolat_Widget_New_Entrys" );' ) );
+add_action( 'widgets_init', function(){return register_widget( "Chocolat_Widget_New_Entrys" );});

 /* ----------------------------------------------
  * 99.2 - Category Recent Posts Widget
@@ -2262,7 +2262,7 @@
 <?php
        }
 }
-add_action( 'widgets_init', create_function( '', 'return register_widget( "Chocolat_Widget_Category_Recent_Posts" );' ) );
+add_action( 'widgets_init', function(){return register_widget( "Chocolat_Widget_Category_Recent_Posts" );});

 /* ----------------------------------------------
  * 99.3 - PageNavi Widget
@@ -2340,4 +2340,4 @@
 <?php
        }
 }
-add_action( 'widgets_init', create_function( '', 'return register_widget( "Chocolat_Widget_PageNavi" );' ) );
\ No newline at end of file
+add_action( 'widgets_init', function(){return register_widget( "Chocolat_Widget_PageNavi" );});
  • 参考ページは以下。

moondoldo.com

MacからMicrosoft Remote DesktopでWindowsに接続できない件とファイルのコピー

Microsoft Remote Desktopで接続できない

Windows10で接続できていたPCにWindows11にしてから「code 0x204」のエラーで接続できなくなっていた。

Winddows11(Pro)側の設定で「システム」ー「リモートデスクトップ」をON(有効)にして「OS再起動」する。 再起動しないとポート3389が有効にならないのだろう。

Mac側のファイルをWindows側にコピー

Mac側でフォルダをリダイレクトフォルダ(共有みたいなイメージか)に設定。

Microsoft Remote DesktopのRedirect Foldersの例
Microsoft Remote DesktopのRedirect Foldersの例
接続PCの「編集」の「Folders」から 「Redirect folders」にチェックして「+」で見せたいフォルダを追加する。 Windows側ではそのPC配下そのフォルダがマウントされ見えるイメージ。それでコピーが可能になる。

Mac側で、command+CでコピーしてWindows側でCTRL+Vとしてコピペしてのファイルコピーはできなかった(方法があるのなら教えてほしい)。

参考は以下のサイト。

qiita.com

Windowsのサービスが停止できないで停止処理中となった場合

Windowsのサービスを停止したところ、停止できなくって「停止処理中」となってしまった場合の対処。 「停止処理中」となると、サービスを右クリックしたコンテキストメニューでは開始、停止、再起動などグレーアウトしていて何もできなくなるので。

まずはサービスのPIDを調べる

どちらかでPIDを調べる。

  1. 該当サービスを右クリックしてプロパティを見て、サービス名を覚えておき、sc queryex サービス名を実行。
  2. タスクマネージャでPIDを表示させる(PIDの表示列がない場合はタスクマネージャの列タイトル部分を右クリックしてPIDをチェック)。

PIDを指定してtaskkillを実行

> taskkill /pid 該当のPID /f

参考URLは以下

i-think-it.net

macruby.info

GoogleアナリティクスのタグをGA4にそしてGoogleタグマネージャにしてみた

UA(ユニバーサルアナリティクス?)が2023/7/1で使えなくなるということで、GA4に移行。 さらにGoogleタグマネージャにしてみた。

Googleタグマネージャを使うにはGA4にしておかないと測定IDを取得できない。 つまり以下のフローで作業が必要。

  1. GoogleアナリティクスでGA4設定アシスタントを使用してGA4に移行。
  2. データストリームというメニューで参照すると測定IDを表示するのでメモっとく。
  3. Googleタグマネージャ(以下GTM)にアカウントを新規登録。「コンテナ」という単位で複数のタグを管理する。
  4. コンテナにタグを新規で登録する。タグタイプは「GoogleアナリティクスGA4設定」で測定IDを入力。イベントは「All Pages」を選択。
  5. GTMでプレビュー後、公開。バージョン管理してくれているようで公開ごとにそのバージョン名を入力する。リポジトリにチェックインするときのコメントみたいなものか。

今まではそれぞれのサイトにGoogleアナリティクスで生成したタグIDとともにjavascriptで埋め込んでいたが、 GTMでは同じjavascriptをそれぞれのサイトに埋め込んでおいて、測定IDはGTMで管理するという感じ。 しかも、GTMでは「プレビュー」という機能があり、GTMのタグを埋め込んだサイトで正常に動作するのかを確認できる。 その他もろもろ、以下のサイトが詳しい。

moltsinc.co.jp

なお、Bloggerに埋め込む場合、UAのときは設定にIDだけ入力するところがあるのだが、GTMの場合は現時点ではHTML編集しないといけないらしい。

www.ozu-log.com

しかし、保存しようとするとGTMのjavascriptが以下のエラーとなる。

org.xml.sax.SAXParseException; lineNumber: NNNN; columnNumber: NN; The reference to entity "l" must end with the ';' delimiter.

これは以下のサイトの記載通り、

geromazusoup.blogspot.com

&」をエスケープ「&amp;」してあげないといけないらしい。

<script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
})(window,document,'script','dataLayer','XXX-XXXXXX');</script>
<script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
j=d.createElement(s),dl=l!='dataLayer'?'&amp;l='+l:'';j.async=true;j.src=
'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
})(window,document,'script','dataLayer','XXX-XXXXXX');</script>

excelの保護ビュー「インターネットから入手したファイルは~」を(削除|解除)する

インターネット経由(メール添付も)で入手したexcelファイルは、

インターネットから入手したファイルは、ウイルスに感染している可能性があります。編集をする必要がなければ、保護ビューのままにしておくことをお勧めします。

と保護ビューとなるものが出る。危険だからということで表示してくれるが、あきらかに問題ないファイルもそうなるので、それを解除する方法。

検索していると「excelのオプションのトラストセンター(セキュリティーセンター)の画面から『インターネットから取得したファイルに対して、保護ビューを有効にする』というチェックを外す」と書いてあるサイトがあるが、それをやってしまうとどんなファイルも保護ビューを表示しなくなる。これではセキュリティ的に意味がない。

あきらかに問題ないファイルだけ保護ビューを外したい、つまり、該当するファイル内部で持っている「インターネットから持ってきているぜ」というフラグを削除するにはどうしたらいいのかを検索していたところ、以下のサイトが秀逸。サンプルバッチまである。

Excel ファイルの保護ビューを外したい

このサイトの「2. 保護ビューを削除するには」に記載してあるとおり、excelからではなくエクスプローラのプロパティから(全般タブにある「セキュリティ」と表示しているところの「許可する」をチェックで)削除するんですね。

Java(JRE)カレンダー和暦(令和対応)について

JDK8(Oracle JDK 8u211以前)を使用していてハマったので備忘録。

$ echo 令和 | native2ascii
\u4ee4\u548c

この値と令和の省略文字"R"、JST時間2019年5月1日9:00(GMT2019年5月1日0:00)のミリ秒(1556668800000)を jre/lib/calendars.propertiesに追記。

$ cat ${JAVA_HOME}/jre/lib/calendars.properties
....
calendar.japanese.eras: \
    name=Meiji,abbr=M,since=-3218832000000;  \
    name=Taisho,abbr=T,since=-1812153600000; \
    name=Showa,abbr=S,since=-1357603200000;  \
    name=Heisei,abbr=H,since=600220800000;   \
    name=\u4ee4\u548c,abbr=R,since=1556668800000
....

以下のサイトが秀逸。

Javaバージョン別の改元(新元号)対応まとめ

Oracleのアーカイブログで以前のデータを消す方法

リカバリマネージャRMANでアーカイブログを削除できるが、実際のアーカイブログフォルダを見ると リストにも表示しないファイルがまだ残っていたりすることがある。 この場合はOS側から削除してもいいらしい。削除の手順としては以下のとおり。

まずRMANを実行して削除

> set ORACLE_SID=FOO
> rman target SYS/SYSのパスワード
RMAN> list archivelog all;
表示したのが管理対象のログファイル
RMAN> delete archivelog all;
RMAN> list archivelog all;
表示しなくなるはず
RMAN> exit

なお、日付指定も可能。例えば30日以前のアーカイブログファイルなら

RMAN> delete archivelog until time 'sysdate - 30';

OS側で削除

上記で表示・削除しているのはoracleが管理対象としているファイルだけ。 なので管理対象外のファイルは残ったままとなる。その場合はOS側コマンドで削除する。 削除後、念のためチェックして(間違って管理対象を削除した場合でも)oracleに認識させる。

> set ORACLE_SID=FOO
> rman target SYS/SYSのパスワード
RMAN> crosscheck archivelog all;
なにもなければ対象なしとなるはず
RMAN> delete expired archivelog all;
なにもなければ削除もない
RMAN> exit

参考サイトは以下がよい。

アーカイブログの削除方法まとめ(ORA-00257対処方法)