Загрузка файлов в метабокс WordPress для произвольного типа записей
Я относительно новичок в разработке WordPress и столкнулся с проблемой. Я создал произвольный тип записи, который отображается в меню администратора. Мне нужен метабокс с полем загрузки файла. Метабокс отображается нормально, но файл не сохраняется.
Я использую следующий код. Буду благодарен за любую помощь.
////////////////// Лучшие практики ///////////////
add_action( 'init', 'wpb_register_cpt_best_practices' );
function wpb_register_cpt_best_practices() {
$labels = array(
'name' => _x( 'Лучшие практики', 'best practices' ),
'singular_name' => _x( 'Лучшая практика', 'best practice' ),
'add_new' => _x( 'Добавить новую', 'best practice' ),
'add_new_item' => _x( 'Добавить новую лучшую практику', 'best practice' ),
'edit_item' => _x( 'Редактировать лучшую практику', 'best practice' ),
'new_item' => _x( 'Новая лучшая практика', 'best practice' ),
'view_item' => _x( 'Просмотреть лучшую практику', 'best practice' ),
'search_items' => _x( 'Поиск лучших практик', 'best practice' ),
'not_found' => _x( 'Лучшие практики не найдены', 'best practice' ),
'not_found_in_trash' => _x( 'В корзине лучшие практики не найдены', 'best practice' ),
'parent_item_colon' => _x( 'Родительская лучшая практика:', 'best practice' ),
'menu_name' => _x( 'Лучшие практики', 'best practice' ),
);
$args = array(
'labels' => $labels,
'hierarchical' => false,
'supports' => array( 'title', 'editor', 'revisions' ),
'public' => true,
'show_ui' => true,
'show_in_menu' => true,
'show_in_nav_menus' => true,
'publicly_queryable' => true,
'exclude_from_search' => false,
'has_archive' => true,
'query_var' => true,
'can_export' => true,
'rewrite' => true,
'capability_type' => 'post'
);
register_post_type( 'best practice', $args );
}
$key_bp = "best practice";
$meta_boxes_bp = array(
"document" => array(
"name" => "document",
"title" => "Документ лучших практик",
"description" => "Прикрепите документ лучших практик.",
"type" => "file")
);
function wpb_create_meta_box3() {
global $key_bp;
if( function_exists( 'add_meta_box' ) ) {
add_meta_box( 'new-meta-boxes', ucfirst( $key_bp ) . ' Документ', 'display_meta_box3', 'best practice', 'normal', 'high' );
}
}
function display_meta_box3() {
global $post, $meta_boxes_bp, $key_bp;
?>
<div class="form-wrap">
<?php
wp_nonce_field( plugin_basename( __FILE__ ), $key_bp . '_wpnonce', false, true );
foreach($meta_boxes_bp as $meta_box) {
$data = get_post_meta($post->ID, $key_bp, true);
?>
<div class="form-field form-required">
<label for="<?php echo $meta_box[ 'name' ]; ?>"><?php echo $meta_box[ 'title' ]; ?></label>
<input type="file" name="<?php echo $meta_box[ 'name' ]; ?>" value="<?php echo (isset($data[ $meta_box[ 'name' ] ]) ? $data[ $meta_box[ 'name' ] ] : ''); ?>" />
<p><?php echo $meta_box[ 'description' ]; ?>
<?php //print_r($data);
?></p>
</div>
<?php } ?>
</div>
<?php
}
function wpb_save_meta_box3( $post_id ) {
global $post, $meta_boxes_bp, $key_bp;
foreach( $meta_boxes_bp as $meta_box ) {
if (isset($_POST[ $meta_box[ 'name' ] ])) {
$data[ $meta_box[ 'name' ] ] = $_POST[ $meta_box[ 'name' ] ];
}
}
if (!isset($_POST[ $key_bp . '_wpnonce' ]))
return $post_id;
if ( !wp_verify_nonce( $_POST[ $key_bp . '_wpnonce' ], plugin_basename(__FILE__) ) )
return $post_id;
if ( !current_user_can( 'edit_post', $post_id ))
return $post_id;
update_post_meta( $post_id, $key_bp, $data );
}
add_action( 'admin_menu', 'wpb_create_meta_box3' );
add_action( 'save_post', 'wpb_save_meta_box3' );
Для загрузки файлов в метабоксы WordPress в пользовательских записях, пожалуйста, обратитесь к следующей ссылке:
Или вы можете использовать следующие плагины:
https://wordpress.org/plugins/simple-fields/
http://www.advancedcustomfields.com/
Оба плагина отлично подходят для работы с пользовательскими полями. Вы также можете создавать повторяемые поля.

Пожалуйста, постарайтесь, чтобы сам ответ мог решить проблему. Ответы, состоящие в основном или полностью из ссылок, почти никогда этого не делают. Лучше всего добавить в ответ соответствующий код и объяснение.

Такие ответы вредны для сайта. Пожалуйста, улучшите свои ответы

Голосую за. Не слушайте тех, кто говорит, что вы не должны были отвечать так плохо. Ваш ответ помог нам ;) спасибо

У меня не сработало, пришлось добавить encytype="multipart/form-data" в форму edit.php, используя принятый ответ здесь: https://stackoverflow.com/questions/46409457/files-consistently-empty-in-wordpress-post-meta-upload-box
