2011-08-16 17 views
0

OOPを使用してWordPressのプラグインを作成していますが、Settings APIに問題があります。3番目のパラメータ(コールバック関数)はECHO/PRINTの戻り値である必要があります定義関数、およびない関数が入力をエコー行い、より多くの情報のためにこれを見て:理由でエコーのwordpressプラグイン:OOPで設定api

public function another_function(){ 
    add_settings_field('test', 'test', $this->get_input('test', 'test', 'text'), 'test_settings', 'test_settings'); 
} 

public function get_input($id, $name, $type, $size=40, $droparray = NULL){ 
    $options = get_option('brutal_settings_group'); 
    switch ($type) { 
     case 'text': 
      echo '<input id="'. $id .'" name="test['. $name .']" size="'. $size .'" type="text" value="'. $options[$name] .'" />'; 
      break; 
    } 
} 

enter image description here

を、これはコードですあなたが見てする必要がスニペットget_input関数では、各ページのすべてのフィールドの上にフィールドが表示されますが、wordpress関数add_settings_fieldが返された値は、それを印刷するために関数にカウントされていません、それは働いていただろう、このように来る方法?

希望私は私の考えは、よろしく

+0

賞金が追加されました。本当に解決策が必要です。 – SAFAD

答えて

4

add_settings_fieldは、第3引数がcallbackであると想定していますが、実際にはget_inputメソッドを呼び出しています。 get_inputメソッドをコールバックとして使用するには、オブジェクトとメソッド名array($this, 'get_input')を含む配列を渡す必要があります。

これを行うときに引数を直接メソッドに渡すことはできませんが、add_settings_field呼び出しの6番目の引数として値の配列を渡すと、Wordpressは呼び出し時にこの配列をコールバックに渡します。あなたはその後、以下のような配列、何かから値を抽出するためにコールバック関数を修正する必要があると思い

add_settings_field(
    'test', 
    'test', 
    array($this, 'get_input'), 
    'test_settings', 
    'test_settings', 
    array(
     'id' => 'test', 
     'name' => 'test', 
     'type' => 'text' 
    ) 
); 

:だから、あなたのadd_settings_field呼び出しは次のようになります。

public function get_input($args) { 
    $size = 40; 
    $droparray = NULL; 
    extract($args); 
    … 
+1

引数がコールバックに渡される方法に応じて、OPはメソッドの引数を削除し、['func_get_args()'](http://php.net/manual/en/function.func-get-args)を使用する必要があります。 PHPの代わりに)。 PHP 5.3を使用している場合、無名関数はより簡単に実装できます – Phil

+0

@Phil良い点、私はWordpressのソースを見て答えを更新しました。 –

+0

それは働いていない、引数は、func_get_args()でも、get_input関数に渡されていません – SAFAD

0

リターンとして取ら値クリアページのすべてのコンテンツを持つ変数に供給されました。このページのコンテンツは最後にPHPからエコーされ、エコーアウトされたものは、最後に行ったことがエコーした場合は、そのコンテンツの上または下にすべて表示されます。

+0

はい、私はあなたがadd_settings_field関数のコールバック関数としてクラス関数を使用できないことを意味していますが、これは私が知っているものですが、 ?私はコールバックとしてクラス関数を使用する方法を意味します... – SAFAD

+0

まあ、あなたは内容を取って値を返すことができます。この関数はテンプレート内で呼び出される必要があります。 – Calebj

+0

コンテンツを取得して値を返すことができます。この関数は、doアクション関数で呼び出される必要があります。フックとwordpress APIはhttp://codex.wordpressで読むことができます。org/Plugin_API – Calebj

1

WordPress関数にコールバックを正常に渡していないことが原因です。 '$ this-> get_input()'を解決して結果を 'add_settings_field'に渡そうとしています。

クラスメンバー関数をコールバックとして渡すには、$ thisを参照として、関数名を文字列として渡す必要があります。

add_settings_field('test', 'test', $this->get_input('test', 'test', 'text'), 'test_settings', 'test_settings'); 

は、クラスのメンバ関数を参照するときは、直接、コールバックの引数を渡すことはできません

add_settings_field('test', 'test', array(&$this, 'get_input'), 'test_settings', 'test_settings'); 

なります。

関連する問題