在foreach中调用函数?

时间:2010-11-26 21:34:06

标签: php wordpress wordpress-theming

过去几天我一直在研究一个Wordpress主题项目,我一直坚持如何使用OOP正确运行动态选项页面(我主要是一个主题开发人员,而不是PHP脚本编写者)

    <?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
 }

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

在这个代码示例中,我试图让函数ab_do_htmlprint识别调用它的foreach表达式,因为该函数将在foreach循环中根据需要多次调用。

我已经尝试过几个方法,比如在函数名称中添加一个变量,但这需要使用相同代码的多个函数,只需要使用不同的名称。我也尝试通过引用传递各种变量,但是它们也没有工作,如果它们甚至需要,我可能没有正确地做到这一点。

无论如何要有效地完成这项工作?

3 个答案:

答案 0 :(得分:1)

如果我理解正确,您有一组值要在管理界面上的组中显示为选项。

也许最简短的例子就是我在这里发布的内容:http://swiftthemes.com/forums/showthread.php?383-SWIFT-on-a-WordPRess-MU-install/page2

P.S。发表关于http://wordpress.stackexchange.com的WordPress问题:更多WordPress专家!

答案 1 :(得分: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函数的格式很难阅读,可能是错误的来源。尝试使用HEREDOC表示法或纯PHP字符串

ex)而不是

 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
 }

作为

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

答案 2 :(得分:0)

如果我理解正确,你需要将参数传递给ab_do_htmlprint。 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];