2010-11-26 55 views
0

私は過去数日間Wordpressのテーマプロジェクトに取り組んできました.OPCを使って動的なオプションページを正しく実行する方法については固執しています(私は主にPHPスクリプタではなくテーマ開発者です)。このコード例でforeach内で関数を呼び出す?

<?php 
    $footerpage = new optionpage; 
    $footerpage->title = 'Footer'; 
    $footerpage->titleprint = ' Footer Options'; 
    $footerpage->slug = 'footer'; 
    $footerpage->html = array(
'1' => array(
'type' => 'textarea', 
'class' => 'large-text', 
'name' => 'html', 
'title' => 'HTML', 
'description' => 'Type in whatever HTML you\'d like to see in the footer here:', 
), 
'2' => array(
'type' => 'input', 
'class' => 'large-text', 
'name' => 'background-color', 
'title' => 'Background Color', 
'description' => ' Choose a Background Color:' 
), 

); 

    class optionpage { 

public $title; 
public $titleprint; 
public $slug; 
public $html = array(); 

...... 
...... 
...... 

public function ab_settings() { 

register_setting($this->slug, 'ab_options'); 
add_settings_section('ab_section', '', array(&$this, 'ab_do_titleprint'), 'ab_' . $this->slug . '_options', 'ab_options'); 

foreach ($this->html as $key => $html) { 
add_settings_field($key, $html['title'], array(&$this, 'ab_do_htmlprint'), 'ab_' . $this->slug . '_options', 'ab_section'); 
} 

} 


public function ab_do_htmlprint() { 
$html = $this->html[$key]; 
?> 

<p><?php echo $html['description'] ?></p> 
<<?php echo $html['type'] ?> 
id="<?php echo $html['id'] ?>" 
class="<?php echo $html['class'] ?>" 
name="<?php echo $html['name'] ?>"> 
<?php get_option ($html['name'])?> 
</<?php echo $html['type'] ?>> 
<?php 
} 

...... 
...... 
?> 

機能は、foreachループで必要な回数だけ呼ばれようとしているので、私は、それが呼ばれていますforeachの表現を認識するための機能ab_do_htmlprintを取得しようとしています。

私は、関数名に変数を追加するようないくつかのことを試しましたが、同じコードの複数の関数が必要です。私も参考にして様々な変数を渡そうとしましたが、どちらもうまくいきませんでした。

とにかくこれを効率的に行うには?

+0

私は従いません。 ab_do_htmlprintの動作はどこから呼び出されたかによって異なるでしょうか?私の勘は単純な議論ですが、具体的なことを実際には理解していません –

+0

私が望むのは、多次元配列の中に置く各オプションのHTMLをab_do_htmlprint関数で出力することです。foreachループ内でab_do_htmlprintが呼び出されるたびに、各オプションが作成するオプションページに表示されます。それは理にかなっていますか? – James

答えて

0

として代わりに

public function ab_do_htmlprint() { 
$html = $this->html[$key]; 
?> 

<p><?php echo $html['description'] ?></p> 
<<?php echo $html['type'] ?> 
id="<?php echo $html['id'] ?>" 
class="<?php echo $html['class'] ?>" 
name="<?php echo $html['name'] ?>"> 
<?php get_option($html['name'])?> 
</<?php echo $html['type'] ?>> 
<?php 
} 

HEREDOC表記または純粋にPHPの文字列

EX)を使用してみてください。 add_settings_fieldは、そのためのパラメータを持っているが行います。その後、

add_settings_field($key, $html['title'], array(&$this, 'ab_do_htmlprint'), 'ab_' . $this->slug . '_options', 'ab_section', array($key)); 

public function ab_do_htmlprint($key) { 
    $html = $this->html[$key]; 

など

+0

私は上記のコードを修正しようとしましたが、警告:call_user_func(配列)[function.call-user-func]:最初の引数は有効なコールバックになると予想されます。 – James

+0

WPがadd_settings_fieldの最後の引数が既に配列内にあることを認識したので、最後に配列コードを削除しなければなりませんでした。これはとても近かったので、ありがとう。 – James

0

私はWordpress APIに精通していないので、私が持っているいくつかの仮定を確認してください。 (私はこれが答えではないことを知っていますが、わかりやすくするためにコメントとして記入したくありません)

1)ab_settings()はどこかと呼ばれていますか?
2)問題が発生しているセクションはありますか?

foreach ($this->html as $key => $html) { 
    add_settings_field($key, $html['title'], array(&$this, 'ab_do_htmlprint'), 
    'ab_' . $this->slug . '_options', 'ab_section'); 
} 

3)$keyは魔法のように利用可能であるか、引数としてそれを提供する必要がありますか?

public function ab_do_htmlprint() { 
    $html = $this->html[$key];` 

また、あなたのab_do_htmlprint機能のフォーマットは非常に読みにくいですし、エラーの原因である可能性があります。私が正しく理解していれば、あなたはab_do_htmlprintの引数を渡す必要がある

public function ab_do_htmlprint() { 
    $html = $this->html[$key]; 
    $output = "<p>{$html['description']}</p>"; 
    $output .= "<{$html['type']} id=\"{$html['id']}\""; 
    $output .= " class=\"{$html['class']}\""; 
    $output .= " name=\"{$html['name']}\">"; 
    get_option($html['name']); 
    $output .= "</{$html['type']}>"; 
    echo $output; 
} 
+0

1)ええ、そうです、申し訳ありませんが、私はスクリプト全体を投稿しませんでした。これはadd_action関数によって呼び出されます。 – James

+0

2)セクションがあるかもしれませんが、私はいくつかの要素を変更するなどいくつかのことを試みました。 – James

+0

3)foreach内の最後に$キーを追加しようとすると、ab_do_htmlprint内のコードがうまく動作し、個々の関数をうまく呼び出すことができました:ab_do_html1(); – James

1

私が正しく理解していれば、あなたは上のグループに表示する値の配列を持っていますオプションとして管理画面。

たぶん最短の例では、私はここに掲載するものです:http://swiftthemes.com/forums/showthread.php?383-SWIFT-on-a-WordPRess-MU-install/page2

P.S. http://wordpress.stackexchange.comのワードプレスの質問を投稿してください:もっとワードプレスの専門家!

+0

これは基本的には、私はSettings APIを使用しており、オブジェクト指向の観点からこれを達成しようとしているので、新しいオプションを追加するたびにadd_settings_fieldコードを再コピーして貼り付ける必要はありません。 – James

関連する問題