WordPressのドキュメンテーションはオブジェクト指向のコードに斑点があるようです。私はいくつかのプラグインを設定しています、そして最初のものは設定とメニューページを登録するべきです。 register_setting()
またはadd_settings_field()
呼び出しに対して "undefined"を投げています。これらは他のところに行くべきですか?
管理者設定ページも作成されていませんか。助けてくれてありがとう。
<?php
//$c = new mySettings();
class mySettings {
public function __construct() {
$this->add_hooks();
$this->register_settings();
}
public function add_hooks() {
add_action('admin_menu', array($this, 'admin_menu'));
add_action('admin_init', array($this, 'register_settings'));
}
public function register_settings() {
//exit('register_settings'. microtime());
register_setting('mySettings', 'mySettings', null);
add_settings_field('myUrl', 'API URL', array($this, 'myUrl_callback'), 'my');
add_settings_field('myOauthUrl', 'API Host', array($this, 'myOauthUrl_callback'), 'my');
add_settings_field('myClientId', 'API Client Id', array($this, 'myClientId_callback'), 'my');
add_settings_field('mySharedSecret', 'API Shared Secret', array($this, 'mySharedSecret_callback'), 'my');
}
public function admin_menu() {
exit('admin_menu'. mircotime());
add_options_page('my API Settings', 'my Settings', 'manage_options', 'my-my', array($this, 'settings_page'));
}
public function settings_page() {
if (!current_user_can('manage_options')) {
wp_die(__('You do not have sufficient permissions to access this page.'));
}
print '<h2>my API Settings</h2><form action="options.php" method="post">';
print settings_fields('mySettings');
print do_settings_sections('mySettings_selections');
print submit_button() .'</form>';
}
public function myUrl_callback() {
$options = get_option('mySettings');
$option = isset($options['myUrl']) ? $options['myUrl'] : '';
print '<input id="myUrl" name="mySettings[myUrl]" type="text" value="' . $option . '" />';
}
}
プラグイン(またはテーマ)がロードされたときに関数が正しく存在しないため、これらは未定義です。管理領域インクルードはまだ発生していません。
設定フィールドを登録したい場合は、admin_init
にフックするのが最善です。
要するに、こうすることでクラスを修正できます。
<?php
class mySettings {
public function __construct() {
$this->add_hooks();
}
// other stuff here
}
またはこれ:
<?php
//$c = new mySettings();
class mySettings {
public function __construct() {
add_action('admin_menu', array($this, 'admin_menu'));
add_action('admin_init', array($this, 'register_settings'));
}
// other stuff here
}
ファイルがWordPressに含まれる順序についてです。 WPがどこへ行くのかさえわからなくなる前に、プラグインとテーマは早い段階でロードされます。そのため、後で(admin_init
やinit
のように)接続して、レジスター設定や投稿タイプなどを実行します。
余談ですが、私はこのようなクラスを構成するのが好きです。
<?php
class WPT26_Awesome
{
private static $ins = null;
public static function init()
{
// for themes: add_action('after_setup_theme', array(self::instance(), '_setup'));
add_action('plugins_loaded', array(self::instance(), '_setup'));
}
public static function instance()
{
// create a new object if it doesn't exist.
is_null(self::$ins) && self::$ins = new self;
return self::$ins;
}
public function _setup()
{
// other calls to `add_action` here.
}
}
アクションやフィルタをコンストラクタから除外しているので、テストが簡単になります。 ... WPT26_Awesome::init();
ですべてを始めることができます。これは このテーマに関するチュートリアル です。