2012-03-28 28 views
1

我在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:

Box title in WordPress

这里的是,在上面的meta框一旦选定另一元框(假设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', 

我的计划是具有[“引”]的值(从正上方的meta框代码)以匹配[“值”]值(来自无线电元框),因此它们可以连接,然后使用IF语句进行测试,以确保它们相同,然后只在它们都等于value_one时才显示。

下面的函数实际上是将元框添加到WordPress中。在这一功能,我试图创建这个IF语句这两个搭配在一起:

if($this->_meta_box['value'] == $this->_meta_box['lead']) 

,但它不工作,我不知道该如何定位[“值”],因为它是嵌套在多个阵列内的(或者我认为,是问题)。

下面是完整的功能:

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

你在哪里得到'$ this - > _ meta_box'?该数组的内容是什么? – jeremyharris 2012-03-28 15:12:26

+0

@jeremyharris我制成一个foreach“的foreach($ meta_boxes为$ meta_box)”即取“meta_boxes []”的每个实例,并用它来从它拉值。 – 2012-03-28 15:23:43

回答

0

要访问多维数组的值在PHP中,使用以下语法:

$arrayVar['key1']['key2']; 

因此访问你的第一个数组中的“价值”键,像这样做:

$this->_meta_box['fields']['options']; 
/* returns 
array(
    array('name' => 'Value 1', 'value' => 'value_one'), 
    array('name' => 'Value 2', 'value' => 'value_two'), 
); 
*/ 
// to get the first option's value 
$this->_meta_box['fields']['options'][0]['value']; 
// to get the second option's value 
$this->_meta_box['fields']['options'][1]['value']; 
+0

这有助于我更好地理解。但是,当我将IF语句更改为 if($ this - > _ meta_box ['fields'] ['options'] [0] ['value'] == $ this - > _ meta_box ['lead'])' ...没有任何改变。我想我仍然错过了一些东西。如果您希望看到完整的代码文件以更好地包装您的头部,我可以提供它。 – 2012-03-28 15:37:47

+0

我可能有点不清楚你想做什么。我知道你试图根据选定的广播选项来显示一个元框。你如何获得选定的无线电值,以及你在哪里存储它?这是PHP代码,当用户选择一个选项时,它需要做一些事情来改变它。使用JS显示/隐藏元框可能会更好。 – jeremyharris 2012-03-28 15:44:07

+0

是的,你明白了。这正是我想要做的:获得在IF语句中使用的值。我认为它存储在['value']数组中,我可以用你的建议调用它。但是我认为我做错了什么,或者错过了一些东西(显然,我在PHP的新手方面有点小)。 JS解决方案听起来更加优雅,我会研究如何做到这一点作为替代方案(如果您有任何建议,那也会很棒)。感谢Jeremy的帮助! – 2012-03-28 15:53:42