私はほとんどどこでも検索しましたが、提案された答えは私を助けませんでした。
問題:Wordpressインストール、最後のバージョン(3.6.1)があります。クリーンインストールを複数回実行し、wp-includes/option.php
およびその他のファイルを調べました。すべてが機能し、すべてが正しい内容であると確信しています。
プラグインを開発していて、Wordpressで定義された関数get_option
を利用しています。コードがその関数を呼び出すたびに、500: internal server error
応答を受け取ります。奇妙なことに、プラグインのコードはWordpressフレームワーク.。
さらに奇妙なことに、add_options_page
など、これらのインクルードファイルで定義されている他の関数は完全に機能し、正常に動作します。
したがって、たとえば、これは機能します。
$pageTitle = "Title for my Options Page";
$menuLink = "Title for my Menu Link";
$userAccessLevel = 8; //that's admin
$pageSlug = "slug-to-my-plugin-options-page";
$callbackFunction = array($this, 'optionsPage');
add_options_page($pageTitle, $menuLink, $userAccessLevel,
$pageSlug, $callbackFunction);
しかし、これはしません:
get_option("ntp_myoption");
add_options_page
とget_option
の両方が同じフォルダー内のソースファイル(wp-includes\option.php
とwp-includes\plugin.php
)で定義されており、両方の関数がこれらのファイルに効果的に含まれています。プラグイン内の同じファイルで、ファイルを含めたり、必要としたりしませんでした。
誰か手がかりがありますか?
尋ねられたように、私がget_option
を呼び出すコードの完全なブロック-プラグインをラップするのは、私のクラスのコンストラクターからのものです。
function __construct() {
global $wpdb;
$this->table_iso = $wpdb->prefix . "ntp_iso";
$this->pluginUrl = get_option('siteurl') . '/wp-content/plugins/my-plugin';
}
また、言及する価値があるかもしれません:実際のプラグインをラップするクラスがあり、その.phpファイルの下部に(クラス定義の外に)次のコードがあります:
global $tp;
$tp = new MyPlugin();
$plugin = plugin_basename(__FILE__);
register_activation_hook( __FILE__, array($tp, 'install'));
register_deactivation_hook( __FILE__, array($tp, 'deactivate'));
add_action('add_meta_boxes', array($tp, 'init'));
if (is_admin()) {
add_action('admin_menu', array($tp, 'addOptionsPage'));
add_filter("plugin_action_links_$plugin", array($tp, 'addSettingsLink'));
}
これらはすべて魅力のように機能します。
Wp-includes\option.phpがロードされていないようです。
ニヤリと言うだけで、get_options()を呼び出す直前にadd
include_once('wp-includes\option.php');
または、option.phpで次のような他の何かを呼び出してみてください:update_option(null);
option.php
は内部から含まれていますwp-includes/functions.php
while plugin.php
はいくつかの異なる場所の1つに含まれます。
これをコードに挿入すると、現在含まれている/必要なすべてのファイルを確認できます。
$includedStuff = get_included_files();
print_r($includedStuff);
幸運を!
同じ致命的なエラーが発生した後、関連するパスを使用してwp-config.phpファイルをロードしました。
私のファイルはwp-content/plugins/myplugin/css/mystyle.php
ページの上部に次のコードを追加しました。次にget_option()関数は完全に機能しました。
require_once('../../../../wp-config.php');
これが助けになるかもしれません。
よろしく
Options.phpが機能しているかどうかをテストして確認できます。
http://yourdomain.com/wp-admin/options.php
オプションが保存されている場合は、それらが一覧表示されます。
だが...
add_options_pageはダッシュボードメニュー用です。
Get_optionを使用するために必要なのはadd_optionです
「PHP致命的エラー:未定義関数apply_filterの呼び出し」エラーが発生した場合に備えて、ここにメモを追加したいと思います。私はこのエラーをグーグル検索し、この質問を見つけました。
注:これが私の問題だったので、関数のスペルをチェックして、「apply_filter」が単数形ではなく複数形であることを確認する必要がある場合があります(これがこの投稿につながりました!)。