Ich habe in den letzten Tagen an einem Wordpress-Theme-Projekt gearbeitet, und mir ist aufgefallen, wie man eine dynamische Optionsseite mit OOP richtig laufen lässt (ich bin hauptsächlich ein Theme-Entwickler, kein PHP-Scripter).Eine Funktion in foreach aufrufen?
<?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
}
......
......
?>
In diesem Codebeispiel, ich versuche die Funktion ab_do_htmlprint zu bekommen die foreach Ausdrücke zu erkennen, wo es genannt worden, weil die Funktion in der foreach-Schleife nach Bedarf beliebig oft aufgerufen werden soll.
Ich habe mehrere Dinge ausprobiert, wie zum Beispiel eine Variable an den Funktionsnamen anhängen, aber das würde mehrere Funktionen des gleichen Codes erfordern, nur mit einem anderen Namen. Ich habe auch versucht, verschiedene Variablen durch Verweis und so weiterzugeben, aber sie funktionierten auch nicht, und ich habe das vielleicht nicht richtig gemacht, wenn sie überhaupt benötigt werden.
Wie auch immer, um dies effizient zu erreichen?
ich nicht folgen. Wie muss das Verhalten von ab_do_htmlprint davon abhängen, woher es aufgerufen wird? Meine Ahnung ist ein einfaches Argument, aber ich verstehe nicht wirklich die Einzelheiten –
Was ich will, ist die Funktion ab_do_htmlprint die HTML jeder Option, die ich innerhalb der mehrdimensionalen Array platzieren.Jedes Mal, wenn ab_do_htmlprint innerhalb der foreach-Schleife aufgerufen wird, wird jede Option auf der von mir erstellten Optionsseite angezeigt. Ist das sinnvoll? – James