web-dev-qa-db-ja.com

含める方法 PHP プラグイン内のファイルの正しい方法

私の問題は、メインのプラグインファイルにPHPファイルを含めたときです。

include(WP_PLUGIN_URL . '/wordpress-group-buying/ipn/Paypal-ipn.php');
// or
include_once(WP_PLUGIN_URL . '/wordpress-group-buying/ipn/Paypal-ipn.php');
// or
require(WP_PLUGIN_URL . '/wordpress-group-buying/ipn/Paypal-ipn.php');
// or
require_once(WP_PLUGIN_URL . '/wordpress-group-buying/ipn/Paypal-ipn.php');

そしてそのファイル上で私はWordPress関数のような呼び出しがあります:

add_action('hook', 'callback');

そして私は得ます:

致命的なエラー:未定義の関数add_action()への呼び出し

さて、あなたが "use if(**function_exists**('add_action')){"と言う前に、私がそれを使ったならば、それはただうまくいきません。

質問:

  • 正しい方法は何でしょうか。
  • includeinclude_oncerequireの違いは何ですか?いつ魔女を使うのですか?
57
Bainternet

まず、答えてくれた皆さんに感謝します、

私の問題はそれらがWordPressを通過しないように完全なURLでインクルードファイルを呼び出すことでした。それは、私が質問で述べたように、メインプラグインファイルからそれらを呼び出していたために起こりました。だから修正は結局使用してしまいました:

include_once('/ipn/Paypal-ipn.php');

WordPressサポート で読みました。そしてまた答えてくれてありがとう!

5
Bainternet

このパーティーに遅刻しますが、これが「WordPress」の方法です。 plugin_dir_path( __FILE__ ) を使用してください。

<?php
include( plugin_dir_path( __FILE__ ) . 'ipn/Paypal-ipn.php');
?>

関数doesはファイルパスの末尾のスラッシュを返すことに注意してください。

83
Chip Bennett

私が以前作成した2つのプラグインを調べて、プラグイン内に追加ファイルを含める方法が異なることを確認しました。2つの方法があることに気付きました。

プラグインディレクトリを定義する

現在のプラグインの場所を定義するために、あなたのプラグインの内部には以下の定義があります。

サンプルコード:

define( 'PLUGIN_DIR', dirname(__FILE__).'/' );  

まっすぐにまっすぐに含めるまたは必要とする

あなたは単に使うことができます。以下のコード例のように場所を参照して、プラグインフォルダ内にinclude、include_once、require、require_onceを追加します。以下の例はあなたのプラグインフォルダの中のフォルダの中からの別のファイルを含むあなたのルートプラグインディレクトリの中のファイルに基づいているでしょう。

コード例:

include "classes/plugin-core.php";
9

私はインクルードのためのWordPress構成要素を見送ってしまい、次のものを使用します。

require_once(dirname(__FILE__) . '/filename.php);

私はそれが実際にあなたの問題を解決するとは思わない、それはスコープの問題であるように思われるが、それは私が使うコードです。

Includeとrequireの違いは:
ファイルが見つからない場合、 includeは 警告 をスローします。
requireは 致命的エラーをスローします ファイルが見つからない場合

include_onceとrequire_onceは、ファイル/コードが既にインクルード/必須されている場合には、再度そのファイル/コードをインクルード/要求しません。

5
mtekk

含める

Include()ステートメントは、指定されたファイルを組み込み、評価します。

1回だけ含める

Include_once()ステートメントは、スクリプトの実行中に指定されたファイルを組み込み、評価します。これはinclude()ステートメントに似た動作ですが、唯一の違いは、ファイルからのコードが既にインクルードされている場合、それは再びインクルードされないことです。名前が示すように、それは一度だけ含まれます。

必須

require()とinclude()は、失敗の処理方法を除いてあらゆる点で同一です。両方とも警告を生成しますが、require()は致命的エラーになります。言い換えれば、足りないファイルがページの処理を停止させたい場合はrequire()を使用することを躊躇しないでください。

一度だけ必要

Require_once()ステートメントは、スクリプトの実行中に指定されたファイルを組み込み、評価します。これはrequire()文に似た動作ですが、唯一の違いは、ファイルからのコードがすでにインクルードされている場合、それは再びインクルードされないことです。

上記の情報はPHPのドキュメントからのものです。正しいものはありません。コードの必要性によりますが、関数のような重要なものにはrequire()を使いますフッターやループ私はinclude_onceまたはincludeを使用しています。警告を処理し、fatal_errorではなくエラーを発生させているユーザー/訪問者に言うことができるからです。

3
Webord

こんにちは @ブリティッシュコロンビア州:

WordPressがロードされているとき、それはadd_action()関数を定義します before それはプラグインをロードしようとしているという事実はあなたがエラーを受けているということを教えてくれます。

誰があなたの "plugin" をロードしていますか?ロードにinclude*()またはrequire*()を使用していますか?おそらくwp-config.phpファイルにありますか?

1
MikeSchinkel
include( plugin_dir_path( __FILE__ ) . 'ipn/Paypal-ipn.php');

または

define( 'PLUGIN_ROOT_DIR', plugin_dir_path( __FILE__ ) );
include( PLUGIN_ROOT_DIR . 'ipn/Paypal-ipn.php');

または

$plugin_dir_path = plugin_dir_path( __FILE__ );
include( $plugin_dir_path . 'ipn/Paypal-ipn.php');

注:プラグイン内の.cssファイルおよび.jsファイルをadmin_enqueue_scriptsエンキューするには、plugin_dir_url( __FILE__ )を使用してください。

$plugin_dir_uri = plugin_dir_url( __FILE__ );
wp_enqueue_style( 'plugin-style', $plugin_dir_uri . 'css/plugin-style.css');
1
Aamer Shahzad

作業ディレクトリ内に新しいファイルを作成するたびに、それを毎回含める必要があります。ただし、phpファイルだけでなく、directroyをスキャンして自動的に添付する方法を試してください。これにより、両面(バックエンド、フロントエンド)にphp、js、およびcss fiulesを正しく含めることができます。

http://kvcodes.com/2014/05/wordpress-theme-development-include-files-automatically/ /

0
varadha