2010-11-26 4 views
0

Я работаю над проектом темы Wordpress за последние несколько дней, и я зациклился на том, как правильно настроить страницу с динамическими параметрами, используя ООП (я в первую очередь разработчик темы, а не скрипт 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 
} 

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

В этом примере кода, я пытаюсь получить функцию ab_do_htmlprint признать Foreach выражения, где был назван, потому что функция будет вызываться столько раз, сколько необходимо в цикле Еогеасп.

Я пробовал несколько вещей, таких как добавление переменной к имени функции, но для этого потребуется несколько функций одного и того же кода, просто с другим именем. Я также пробовал передавать различные переменные по ссылке и тому подобное, однако они тоже не работали, и я, возможно, не делал этого правильно, если они даже нужны.

В любом случае, для этого эффективно?

+0

i dont follow. как поведение ab_do_htmlprint должно различаться в зависимости от того, где его вызвали? Моя догадка - простой аргумент, но я не очень понимаю специфику – 2010-11-26 21:40:23

+0

Я хочу, чтобы функция ab_do_htmlprint печатала HTML каждой опции, которую я помещаю внутри многомерного массива.Каждый раз, когда ab_do_htmlprint вызывается внутри цикла foreach, каждый параметр будет отображаться на странице параметров, которую я создаю. Имеет ли это смысл? – James 2010-11-26 22:10:10

ответ

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

и т.д.

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 строк

ех) Вместо

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

1) Да, извините, я не опубликовал весь сценарий. Он вызывается через функцию add_action. – James 2010-11-26 21:55:52

+0

2) Это может быть раздел, я не уверен, я пробовал несколько вещей, включая изменение некоторых элементов. – James 2010-11-26 21:56:55

1

Если я правильно понимаю, у вас есть массив значений, которые вы хотите показать в группу на admin в качестве параметров.

Может быть, самый короткий пример того, что я писал здесь: http://swiftthemes.com/forums/showthread.php?383-SWIFT-on-a-WordPRess-MU-install/page2

P.S. пост WordPress вопросы на http://wordpress.stackexchange.com: больше экспертов WordPress!

Смежные вопросы