Проблема с сохранением пользовательских метаданных в wordpress. как сохранить несколько мета-значений в одном повторяющемся поле? - PullRequest
0 голосов
/ 05 мая 2020

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

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');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...