2012-03-28 69 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