質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.31%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

1回答

3664閲覧

PHP8, create_function()の書き替え方をご教授お願い致します。

mita2007

総合スコア1

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

1クリップ

投稿2023/02/14 21:47

編集2023/02/14 21:55

実現したいこと

当方ワードプレスを使用しておりPHPを8以上に変更したく、サーバーで試したところサイトがエラーになってしまいました。テーマはxeory_baseというものを使用しております。

調べた結果themasの中にあるlib>function内のwidget.phpというファイルに問題があることがわかりました。
create_function()という書き方が古い形式のためエラーになってしまうようです。このファイルはフェイスブック関連のものらしく、それほど必要でもないかと思い削除しましたが、それでもサイトは表示されないままでやはりこの関数を変更しないといけないようです。

発生している問題・エラーメッセージ

Fatal error: Uncaught Error: Call to undefined function create_function()
という形でcreate_function()を何らかの形に変えないといけないようです。

該当のソースコード

php

1<?php 2 3/* likebox 4* ---------------------------------------- */ 5if( !class_exists("MyPagePlugin") ){ 6 add_action('widgets_init', create_function('', 'return register_widget("MyPagePlugin");')); 7 class MyPagePlugin extends WP_Widget { 8 function MyPagePlugin() { 9 parent::__construct(false, $name = 'Page Plugin'); 10 } 11

上記がページの始まりの部分です。
大変申し訳ないのですが、どなたかどのように書き替えれば機能するのか、ご教授いただければ幸いです。

宜しくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2023/02/14 21:50

確かにPHP8で削除されているようです。 https://www.php.net/manual/ja/function.create-function.php テーマを直接編集されていますか? アップデートで書き変わるリスクもあるかと思いますが、そもそもPHP7.2時点で非推奨になっていた機能をそのまま使っている時点で、諸々のリスクが付きまとうので、テーマアップデートでも解決しないのであれば、PHP8対応のテーマを探した方が良いかと思います。
mita2007

2023/02/14 22:01

m.ts10806 さま 早々にご返信、アドバイスを頂きましてありがとうございました。 実はテーマのほうはプロに依頼してカスタマイズしてもらったため更新できないこととなっています。 これがネックといえばそれまでなのですが、上記の理由からできればテーマを変えずに調整したいと思っております。
m.ts10806

2023/02/14 22:45

なるほど では、その方に依頼するのが確実と思います。 影響範囲もあるのでそこだけ対応すれば盤石とは限りませんし、カスタマイズされたのであれば一般的に手に入るソースではないので、他者には手出しが難しくなります。
退会済みユーザー

退会済みユーザー

2023/02/14 23:54

create_functionが残ってる時点でプロでもなんでもないのでテーマを変えたほうがいい。create_functionを直しても「クラスと同名のコンストラクタ」なんてPHP4時代のとんでもなく古い記述も残ってるので本当のプロに依頼しても修正しようがないほどどうしようもないテーマ。
mita2007

2023/02/15 11:14

m.ts10806 さま kawax さま ご回答、アドバイスをいただきありがとうございます。 テーマの変更などこちらでも検討してみます。
guest

回答1

0

ベストアンサー

方法1: 無名関数に置き換える

php

1<?php 2 3/* likebox 4* ---------------------------------------- */ 5if( !class_exists("MyPagePlugin") ){ 6 add_action('widgets_init', function() { return register_widget("MyPagePlugin"); }); 7 class MyPagePlugin extends WP_Widget { 8 function MyPagePlugin() { 9 parent::__construct(false, $name = 'Page Plugin'); 10 }

方法2: funcitons.php に create_function関数自体を再実装する
そもそも eval の利用が危険なためにcreate_functionが削除された経緯があるので、こちらの方法はおすすめできません。

php

1if (!function_exists('create_function')) 2{ 3 function create_function($args, $code) 4 { 5 return eval("return function($args) { $code };"); 6 } 7}

投稿2023/02/14 22:27

Eggpan

総合スコア3257

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.31%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問