0

我在 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_one 被选中),将出现在帖子屏幕上:

// 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_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']);
        }
    }
}

希望我能很好地解释问题是什么。我环顾四周并尝试破解一些东西,但我不确定这是否是我可以自己解决的问题。对此的任何输入,或朝着正确方向轻推将是一个巨大的帮助。谢谢!

4

0 回答 0