我正在WordPress中创建多个元框,我希望用户能够打开或关闭某些框。
因此,他们单击一个单选按钮(在一个单独的元框中),更新选项,然后会出现附加到该单选值的另一个元框。
所以它基本上从一个元框(选择器框)变成了两个元框(选择器框和他们刚刚选择的新框)。
在我的代码中,可以通过如下方式创建元框(这是一个单选框,用户可以在其中选择其他元框来打开/关闭):
// Create meta box that gives user ability to select additional meta box,
which will then show upon saving the post
$meta_boxes[] = array(
\'id\' => \'meta_box_id\',
\'title\' => \'Box title\',
\'pages\' => array(\'page\'),
\'context\' => \'side\',
\'priority\' => \'low\',
\'fields\' => array(
array(
\'name\' => \'Select:\',
\'id\' => $prefix . \'meta_box_id\',
\'type\' => \'radio\',
\'options\' => array(
array(\'name\' => \'Value 1\', \'value\' => \'value_one\'),
array(\'name\' => \'Value 2\', \'value\' => \'value_two\'),
)
)
)
);
以下是WordPress中的外观:
http://i.stack.imgur.com/xR69s.png
这是另一个元框,一旦在上面的元框中选中(假设选择了value\\u one),它将出现在post屏幕上:
// This meta box will only show if \'value_one\' is selected from
the radio box above
$meta_boxes[] = array(
\'id\' => \'standard_lead\',
\'title\' => \'Standard Lead\',
\'pages\' => array(\'page\'),
\'context\' => \'normal\',
\'priority\' => \'high\',
\'lead\' => \'value_one\',
\'fields\' => array(
array(
\'type\' => \'text\',
\'id\' => $prefix . \'standard_title\',
\'name\' => \'Lead Title\',
\'desc\' => \'The title of your Standard Lead\',
\'width\' => \'100\'
),
array(
\'type\' => \'textarea\',
\'id\' => $prefix . \'standard_content\',
\'name\' => \'Lead Content\',
\'desc\' => \'The content of your Standard Lead (you can use HTML)\',
\'width\' => \'100\'
)
)
);
该代码的重要部分是:
\'lead\' => \'value_one\',
我的计划是让[\'lead\']值(来自上面的元框代码)与[\'value\']值(来自无线电元框)匹配,这样它们就可以连接,然后用IF语句进行测试,确保它们等于相同的东西,然后仅当它们都等于value\\u one时才显示。
下面的功能实际上是将元框添加到WordPress中。在该函数中,我尝试创建此IF语句以将这两个语句匹配在一起:
if($this->_meta_box[\'value\'] == $this->_meta_box[\'lead\'])
。。。但它不起作用,我不知道如何定位[\'value\',因为它嵌套在多个数组中(或者我认为这是问题所在)。
以下是完整功能:
function add_meta_boxes()
{
$this->_meta_box[\'context\'] = empty($this->_meta_box[\'context\']) ? \'normal\' : $this->_meta_box[\'context\'];
$this->_meta_box[\'priority\'] = empty($this->_meta_box[\'priority\']) ? \'high\' : $this->_meta_box[\'priority\'];
foreach($this->_meta_box[\'pages\'] as $page)
{
if($this->_meta_box[\'value\'] == $this->_meta_box[\'lead\'])
{
// adds meta box to WP
add_meta_box($this->_meta_box[\'id\'], $this->_meta_box[\'title\'], array(&$this, \'show_meta_boxes\'), $page, $this->_meta_box[\'context\'], $this->_meta_box[\'priority\']);
}
}
}
希望我能很好地解释问题所在。我环顾四周,尝试了一些东西,但我不确定这是否是我自己能解决的问题。在这方面的任何投入,或是朝着正确的方向推动,都将是巨大的帮助。非常感谢。
PS:我也在考虑通过JS来实现这一点,但不确定从哪里开始。