update_post_meta de dados em multidimensional array criada a partir de um formulário

Então, eu tenho alguns campos como assim:

"; "; 

Como você pode ver, estes campos de formulário (dos quais há mais, estes são apenas exemplos de ambos os tipos) crie uma multidimensional array assim (eu espero, corrija-me se eu estiver errado):

 Array ( [mainStageSatOrder] => Array ( [theband] => Array ( [theid] => 1 [theorder] => 5 ) [theband] => Array ( [theid] => 2 [theorder] => 8 ) ) ) 

Eu quero que esses valores usem a function update_post_meta para atualizar os campos relevantes quando a atualização da página é enviada. Eu sei que posso ligar a ação de envio ação post_submitbox_start que eu entendo bem.

No que eu não tenho certeza, é o que o PHP pode ser uma vez que o botão Enviar está clicado. O que eu quero acontecer é que quando o botão enviar é clicado, a multidimensional array é feita em loop usando um loop foreach e para cada sub-array ‘theband’, os dois valores são usados ​​na function update_post_meta.

 foreach(???) { update_post_meta( 1, 'theorder', '5' ); //where 1 and 5 are values passed from the MD array } 

Então, o processo vai:

1) Botão de publicação / atualização do usuário 2) Todos os valores de todos os campos são passados ​​para a multidimensional array 3) A matriz de MD está em loop e, usando update_post_meta, os dados do relavent são atualizados 4) Confirme sim / não

Obrigado.

Solutions Collecting From Web of "update_post_meta de dados em multidimensional array criada a partir de um formulário"

Você conseguiu um pequeno problema de pensamento com sua matriz de MD, isso deveria ser assim, caso contrário você replaceá os dados no seu formulário:

 ["mainStageSatOrder"]=> array(2) { [0]=> array(1) { ["theband"]=> array(2) { ["theid"]=> int(1) ["theorder"]=> int(5) } } [1]=> array(1) { ["theband"]=> array(2) { ["theid"]=> int(2) ["theorder"]=> int(8) } } } 

Agora você tem duas opções (eu recomendaria a opção B, porque você pode não precisar dos metadados únicos sem o contexto)

Opção A: Salve seus dados em campos meta únicos. Você precisará a $key pai ( $key ou 'mainStageSatOrder' ), $row_id e field_id ( $sub_key sub_key ou $key ) para obter seus dados.

 function save($post_id) { if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) return; if ( !current_user_can( 'edit_post', $post_id ) || !array_key_exists('mainStageSatOrder', $_POST) ) return; foreach ($_POST['mainStageSatOrder'] as $row_id => $rows) { foreach ($rows as $key => $value) { if (is_array($value)) { foreach ($value as $sub_key => $sub_value) { $meta_key = '_'.$key.'_'.$row_id.'_'.$sub_key; update_post_meta($post_id, $meta_key, $sub_value); } } else { $meta_key = "_mainStageSatOrder_".$row_id."_".$key; update_post_meta($post_id, $meta_key, $value); } } } update_post_meta($post_id, '_mainStageSatOrder', array_keys($_POST['mainStageSatOrder'])); } 

Opção B: salve seus dados em uma matriz serializada (o WordPress controla a serialização). Para acessar e fazer coisas com a matriz novamente, basta unserialize() o meta_value.

 function save_array($post_id) { if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) return; if ( !current_user_can( 'edit_post', $post_id ) || !array_key_exists('mainStageSatOrder', $_POST) ) return; update_post_meta($post_id, '_mainStageSatOrder', $_POST['mainStageSatOrder']); } 

Em algum lugar no seu código PHP:

 $mainStageSatOrder = unserialize( get_post_meta( get_the_ID(), '_mainStageSatOrder', true ) ); 

Primeiro, há um problema com sua matriz. Arrays não podem ter chaves duplicadas. Então, apenas a primeira chave será salva. Você precisa mudar seu formulário para algo assim.

 "; "; "; "; 

A matriz será assim

 $array = array( 'mainStageSatOrder' => array( 'theband0' => array( 'theid' => 1, 'theorder' => 5 ), 'theband1' => array( 'theid' => 2, 'theorder' => 8 ) ) ); 

Você não precisa de um loop foreach enquanto guarda os metadados. Em vez disso, você pode salvá-lo como uma matriz. O WordPress irá serializá-lo automaticamente para você.

 $array = $_POST['mainStageSatOrder']; update_post_meta( $postid, 'mainStageSatOrder', $array ); 

E, enquanto retriving os valores …

 $data = get_post_meta($post->ID, 'mainStageSatOrder', true); 

Os $data retornados serão uma matriz.