Пользовательское поле не сохраняется в Wordpress

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

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

Настраиваемое поле и его содержимое хранятся в базе данных Wordpress, но Wordpress «забывает» их при создании новой настраиваемой записи.

Я создал CPT следующим образом:

//Video Custom Post Typefunction video_init() {    //set up product labels    $labels = array(        'name' => 'Videos',        'singular_name' => 'Video',        'add_new' => 'Add New Video',        'add_new_item' => 'Add New Video',        'edit_item' => 'Edit Video',        'new_item' => 'New Video',        'all_items' => 'All Videos',        'view_item' => 'View Video',        'search_items' => 'Search Videos',        'not_found' =>  'No Videos Found',        'not_found_in_trash' => 'No Videos found in Trash',         'parent_item_colon' => '',        'menu_name' => 'Video',    );    //register post type    $args = array(        'labels' => $labels,        'public' => true,        'has_archive' => true,        'show_ui' => true,        'capability_type' => 'post',        'hierarchical' => false,        'rewrite' => array('slug' => 'video'),        'query_var' => true,        'menu_icon' => 'dashicons-video-alt3',        'supports' => array(            'title',            'editor',            'custom-fields',        )    );    register_post_type( 'video', $args );    //register taxonomy    register_taxonomy('video_category', 'video', array('hierarchical' => true, 'label' => 'Category', 'query_var' => true, 'rewrite' => array( 'slug' => 'video-category' )));}add_action( 'init', 'video_init' );?>

Затем я включаю youtubelink и субтитры в свой пост введите описание изображения здесь

В конце я вызываю CPT, включая его метаданные поста, следующим образом

<!--VIDEOS-->    <div id="videos" class="block relative" style="z-index: 90;padding-top: 100px;padding-bottom: 100px; margin-top: 50% !important;">        <h3 class="block">v/deos > </h3>        <?php $query = new WP_Query( array( 'post_type' => 'video' ) ); ?>        <?php                     $i = 1;                    ?>        <?php if ( $query->have_posts() ) : ?>        <?php while ( $query->have_posts() ) : $query->the_post(); ?>        <?php if(($i % 2) == 0) { ?>        <div class="full-width text-left big-big-block video-cnt">            <div class="row">                <div class="col-sm-8" style="width: 100%; height: 100% auto">                    <?php if (!((get_post_meta($post->ID, 'youtubelink', TRUE))=='')) {                                        echo wp_oembed_get( get_post_meta($post->ID, "youtubelink", true) );                                        }?>                </div>            </div>            <div class="row">                <div class="col-sm-5 col-sm-offset-7 text-left video-description-text">                    <h3>                        <?php the_title(); ?><br/>                        <small><?php echo get_post_meta($post->ID, 'subtitle', true); ?> //////////////////</small></h3>                    <div class="block">                        <p>                            <?php the_content(); ?>                        </p>                    </div>                </div>            </div>        </div>        <?php } elseif (($i % 2) !== 0) { ?>        <div class="full-width text-left big-big-block video-cnt">            <div class="row">                <div class="col-sm-8 col-sm-offset-4">                    <?php if (!((add_post_meta($post->ID, 'youtubelink', TRUE))=='')) {                                        echo wp_oembed_get( get_post_meta($post->ID, "youtubelink", true) );                                        }?>                </div>            </div>            <div class="row">                <div class="col-sm-5 text-right video-description-text">                    <h3>                        <?php the_title(); ?><br/>                        <small><?php echo add_post_meta($post->ID, 'subtitle', true); ?> //////////////////</small></h3>                    <div class="block">                        <p>                            <?php the_content(); ?>                        </p>                    </div>                </div>            </div>            <?php } ?>            <?php $i++; ?>            <?php endwhile; ?>            <?php endif; ?>            <!-- show 404 error here -->        </div>    </div>

Итак, сейчас, когда я создаю новый CPT для видео, мне нужно создать youtubelink и субтитры еще раз. Это меня расстраивает, так как все работает идеально, просто в соответствии с этим конкретным CPT я не могу понять, почему я должен снова и снова создавать метаполя.

Ответы и комментарии:

Я думаю, что $ post не определен. попробуйте заменить $ post-> ID на get_the_ID () и посмотрите, работает ли он.
Создан 06-04-2018 04:39 Andy Macaulay-Brook

Я вызываю все остальные пользовательские поля из других CPT таким же образом, и они работают без проблем
Создан 06-04-2018 05:22 mad2kx

Add_post_meta в вашем шаблоне должно быть get_post_meta
Создан 06-04-2018 05:29 Milo

Ха @ Мило - да, это сделало бы.
Создан 06-04-2018 05:44 Andy Macaulay-Brook

@ Мило это не работает
Создан 06-04-2018 05:25 mad2kx

Должен ли я добавить этот код в functions.php?
Создан 06-04-2018 07:18 mad2kx

да, или ваш собственный плагин
Создан 06-04-2018 07:43 Milo

По умолчанию метаформа поста ограничена отображением 30 ключей. Чтобы изменить значение, используйте фильтр postmeta_form_limit:
add_filter ('postmeta_form_limit', функция ($ limit) {
    вернуть 50;
});

Также рассмотрите возможность добавления пользовательского мета-блока, в котором вы можете настроить выделенные поля вместо необходимости каждый раз выбирать клавишу.
Создан 06-04-2018 07:29