Я не могу понять, как получить данные внутри случая повторяемых ссылок для сохранения в админке. Текстовое поле отлично сохраняется, но я немного не в своей области знаний, когда играю с несколькими мета-значениями в одном повторяемом разделе поля ...
CPT - это 'уроки'
мета значения, не сохраняемые: $ meta ['row_link'] и $ meta ['row_title'].
Это адаптировано из кода Тэмми Харт для многоразовых метаданных: Пользовательские метаданные многократного использования
Любая помощь очень ценится! Спасибо!
// ADD META BOXES
function nbm_mb_lessons() {
add_meta_box(
'lessons_mb', // $id
'Weekend Lessons', // $title
'display_lessons', // $callback
'lessons', // $post-type
'normal', // $context
'high' ); // $priority
}
add_action('add_meta_boxes', 'nbm_mb_lessons');
// FIELD ARRAYS
//... activities
$prefix = 'lesson_';
$lesson_fields = array(
array(
'label' => 'Activities',
'id' => $prefix.'act',
'type' => 'repeatable-links'
),
array(
'label' => 'Worship Videos',
'id' => $prefix.'wrshp',
'type' => 'repeatable-links'
),
array(
'label' => 'The Big Idea',
'id' => $prefix.'idea',
'type' => 'textarea'
),
);
// THE CALLBACK
function display_lessons() {
global $lesson_fields, $post;
echo '<input type="hidden" name="lesson_meta_box_nonce" value="'.wp_create_nonce(basename(__FILE__)).'" />';
echo '<table class="mb-admin__table">';
foreach ($lesson_fields as $field) {
$meta = get_post_meta($post->ID, $field['id'], true);
echo '<tr>
<th><label for="'.$field['id'].'">'.$field['label'].'</label></th>
<td>';
switch($field['type']) {
// textarea
case 'textarea':
echo '<textarea name="'.$field['id'].'" id="'.$field['id'].'" cols="60" rows="4">'.$meta.'</textarea>';
break;
// repeatable links with titles
case 'repeatable-links':
echo '<ul id="'.$field['id'].'-repeatable" class="repeatable">';
if( empty($meta) ){
$meta = array(
'row_title' => '',
'row_link' => '',
);
}
$i = 0;
if ( $meta ) {
//foreach( $meta as $row ) {
echo '<li>
<span class="sort hndle"><span class="dashicons dashicons-menu-alt2"></span></span>
Age Group. <input type="text" name="nbm_row_title['.$i.']" id="'.$field['id'].'" value="'.$meta['row_title'].'" size="30" />
Activity Link. <input type="text" name="nbm_row_link['.$i.']" id="'.$field['id'].'" value="'.$meta['row_link'].'" size="30" />
<a class="repeatable-remove button" href="#"><span class="dashicons dashicons-no-alt"></span></a>',
'</li>';
$i++;
//}
} else {
echo '<li>
<span class="sort hndle"><span class="dashicons dashicons-menu-alt2"></span></span>
Age Group. <input type="text" name="'.$field['id'].'['.$i.']" id="'.$field['id'].'" value="'.$row.'" size="30" />
Activity Link. <input type="text" name="'.$field['id'].'['.$i.']" id="'.$field['id'].'" value="'.$row.'" size="30" />
<a class="repeatable-remove button" href="#"><span class="dashicons dashicons-no-alt"></span></a>',
'</li>';
}
echo '</ul>';
echo '<a class="repeatable-add theme-btn" href="#">Add Row</a>';
break;
}
echo '</td></tr>';
}
echo '</table>';
}
// SAVING ACTIVITIES POST DATA
function save_lesson_meta( $post_id ) {
global $lesson_fields;
if (!wp_verify_nonce($_POST['lesson_meta_box_nonce'], basename(__FILE__))) {
return $post_id;
}
if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) {
return $post_id;
}
if ('page' == $_POST['post_type']) {
if (!current_user_can('edit_page', $post_id))
return $post_id;
} elseif (!current_user_can('edit_post', $post_id)) {
return $post_id;
}
foreach ($lesson_fields as $field) {
$old = get_post_meta($post_id, $field['id'], true);
$new = $_POST[$field['id']];
if ($new && $new != $old) {
update_post_meta($post_id, $field['id'], $new);
} elseif ('' == $new && $old) {
delete_post_meta($post_id, $field['id'], $old);
}
}
if( !$update ){
return;
}
$meta = array();
$meta['row_title'] = sanitize_text_field( $_POST[ 'nbm_row_title' ]);
$meta['row_link'] = sanitize_text_field( $_POST[ 'nbm_row_link' ]);
update_post_meta( $post_id, $field['id'], $meta );
}
add_action('save_post', 'save_lesson_meta');