ほとんどどこでも検索しましたが、提案された回答は役に立ちませんでした。
問題: 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'));
}
これらはすべて魔法のように機能します。