Me alegro te haya servido. En relación al punto #1:
Esta función: get_post_meta($post->ID, 'nombre_custom_field', true); en caso de que no tengas valores definidos en tu variable 'nombre_custom_field' devuelve "vacío" por lo que si vas a guardar un array en esa variable la validación:
PHP:
if (!empty($micampo)){...}
es correcta. Pero, si vas a guardar un valor que no es un array usa mejor esta validación:
PHP:
if ( $micampo != "" ){...}
Con respecto al punto #02 no entiendo mucho tu duda pero creo que lo que quieres es añadir mas campos a ese widget tal como aparece en tu ejemplo ¿correcto? de ser ese el caso te comento nuevamente:
Widget que creo tu lo llamas "header":
i
PHP:
f ( !function_exists('myfieldtest_myfieldtest_function') ) {
function myfieldtest_myfieldtest_function() {
add_meta_box( 'myfieldtest-function-id', 'Campos Personalizados', 'myfieldtest_callback_function', 'post', 'normal', 'high' );
}
add_action( 'add_meta_boxes', 'myfieldtest_myfieldtest_function' );
}
Campos dentro del widget:
PHP:
if ( !function_exists('myfieldtest_callback_function') ) {
function myfieldtest_callback_function( $post ) {
$datax1 = get_post_meta( $post->ID, '_datax1', true );
$datax2 = get_post_meta( $post->ID, '_datax2', true );
$datax3 = get_post_meta( $post->ID, '_datax3', true );
$outline = '
<table><tbody>
<tr>
<td scope="row">DATO X1</td>
<td>
<input type="text" name="datax1" id="datax1" value="'.$datax1.'" />
</td>
</tr>
<tr>
<td scope="row">DATO X2</td>
<td>
<input type="text" name="datax2" id="datax2" value="'.$datax2.'" />
</td>
</tr>
<tr>
<td scope="row">DATO X3</td>
<td>
<input type="text" name="datax3" id="datax3" value="'.$datax3.'" />
</td>
</tr>
</tbody></table>';
echo $outline;
}
}
y por ultimo para guardar esos cambios:
PHP:
if ( !function_exists('myfieldtest_save_meta_box') ) {
function myfieldtest_save_meta_box( $post_id ) {
if ( isset($_POST['datax1']) && $_POST['datax1']!= "" ) {
update_post_meta( $post_id, '_datax1', trim($_POST['datax1']) );
}
if ( isset($_POST['datax2']) && $_POST['datax2']!= "" ) {
update_post_meta( $post_id, '_datax2', trim($_POST['datax2']) );
}
if ( isset($_POST['datax3']) && $_POST['datax3']!= "" ) {
update_post_meta( $post_id, '_datax3', trim($_POST['datax3']) );
}
}
add_action( 'save_post', 'myfieldtest_save_meta_box' );
}
Claro este es un ejemplo bastante básico. Tienes que hacer pruebas por si necesitas validar mas cosas como por ejemplo guardar información en blanco (que de momento no lo hace) y para hacerlo modifica donde dice $_POST['datax1']!= "" y los tipos de campos que manejes, etc.
No me dio chance de validar funcione ese código que te envié pero al menos te puede servir de idea
😉