Как получить доступ к ключам 'value' в многомерном массиве? - PullRequest
1 голос
/ 28 марта 2012

Я создаю несколько мета-блоков в WordPress и хочу, чтобы пользователь мог включать и выключать определенные поля.

Итак, они нажимают переключатель (в отдельном мета-поле), обновляютопции и дополнительный мета-блок, прикрепленный к этому значению радио.

Таким образом, он в основном идет от одного мета-блока (блока селектора) к двум мета-блокам (блоку селектора И новому полю, который они простоselected).

В моем коде вы можете создать мета-блок, установив что-то вроде этого (это радио-блок, где пользователь выбирает для других мета-боксов включение / выключение):

// 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

А вот еще один мета-блок, который после выбора в мета-поле выше (скажем, выбрано 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'] (откод мета-поля прямо выше) для соответствия значению ['Значение e '] (из радиометаблока), чтобы их можно было соединить, а затем проверить с помощью оператора 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']);
        }
    }
}

1 Ответ

0 голосов
/ 28 марта 2012

Чтобы получить доступ к значениям многомерного массива в PHP, используйте следующий синтаксис:

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

Таким образом, чтобы получить доступ к ключам 'value' в вашем первом массиве, сделайте это так:

$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'];
...