web-dev-qa-db-ja.com

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

私はほとんどどこでも検索しましたが、提案された答えは私を助けませんでした。

問題: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_pageget_optionの両方が同じフォルダー内のソースファイル(wp-includes\option.phpwp-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'));
}

これらはすべて魅力のように機能します。

8
testuser

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);

幸運を!

8
Ray

同じ致命的なエラーが発生した後、関連するパスを使用してwp-config.phpファイルをロードしました。

私のファイルはwp-content/plugins/myplugin/css/mystyle.php

ページの上部に次のコードを追加しました。次にget_option()関数は完全に機能しました。

require_once('../../../../wp-config.php'); 

これが助けになるかもしれません。

よろしく

10
Sumith Harshan

Options.phpが機能しているかどうかをテストして確認できます。

http://yourdomain.com/wp-admin/options.php

オプションが保存されている場合は、それらが一覧表示されます。

だが...

add_options_pageはダッシュボードメニュー用です。

Get_optionを使用するために必要なのはadd_optionです

http://codex.wordpress.org/Function_Reference/add_option

1
fisicx

「PHP致命的エラー:未定義関数apply_filterの呼び出し」エラーが発生した場合に備えて、ここにメモを追加したいと思います。私はこのエラーをグーグル検索し、この質問を見つけました。

注:これが私の問題だったので、関数のスペルをチェックして、「apply_filter」が単数形ではなく複数形であることを確認する必要がある場合があります(これがこの投稿につながりました!)。

0
Nicolas Wynkoop