0

カスタマイズを終えたばかりの、既製の新しい wordpress テーマで問題が発生しました。実稼働マシン (多くのプラグインを使用) にインストールすると、サイトでエラーがスローされます。

致命的なエラー: admin_init() を再宣言できません

2 つのインスタンスへのパスとともに。それらを調べると、次の関数がテーマ ファイルで宣言されていることがわかります。

add_action('admin_init', 'admin_init');
function admin_init()
{....

これはプラグインファイルで宣言されています:

add_action("admin_init", "admin_init");
function admin_init(){...

明らかに、エラーはこれが許可されていないと述べています。しかし、私の質問は、これを修正して、テーマとプラグインの両方が機能するために必要なものを取得するための最良の方法は何ですか? この場合、私は「最良」を、更新に関しては最小限の子守を必要とするソリューションとして定義します (プラグインとテーマの...プラグインはテーマよりも頻繁に更新される可能性が高いと考えられます)。

ありがとう!

4

1 に答える 1

1

WordPressテーマを開発するとき、コーデックスは次のように述べています

テーマは、すべてのカスタム関数名、クラス、フック、パブリック/グローバル変数、データベース エントリ (テーマ オプション、ポスト カスタム メタデータなど) を含む、パブリック名前空間内のすべてのプレフィックスとして一意のスラッグを使用する必要があります。

したがって、問題の標準的な解決策は、テーマの名前に基づいて、パブリック関数の前に一意のスラッグを使用することです。

add_action('admin_init', 'my_theme_slug_admin_init');
function my_theme_slug_admin_init()
{....

PHP クラスや一般的な OOP に精通している場合、変更を最小限に抑える (およびスラッグを入力する) ために人々が使用する 1 つのアプローチは、カスタム関数をクラスにラップすることです。そのアプローチ (ここで説明されているように、この (少しイライラする!) の質問への回答である程度説明されているように)は、カスタム関数をクラスにカプセル化するため、クラス名自体のみがグローバル名前空間に表示されます。

于 2013-03-29T21:46:22.713 に答える