过去几天我一直在研究一个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循环中根据需要多次调用。
我已经尝试过几个方法,比如在函数名称中添加一个变量,但这需要使用相同代码的多个函数,只需要使用不同的名称。我也尝试通过引用传递各种变量,但是它们也没有工作,如果它们甚至需要,我可能没有正确地做到这一点。
无论如何要有效地完成这项工作?
答案 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];
等