Загрузка файлов в метабокс 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/
Оба плагина отлично подходят для работы с пользовательскими полями. Вы также можете создавать повторяемые поля.
Пожалуйста, постарайтесь, чтобы сам ответ мог решить проблему. Ответы, состоящие в основном или полностью из ссылок, почти никогда этого не делают. Лучше всего добавить в ответ соответствующий код и объяснение.
Nicolai Grossherr
Такие ответы вредны для сайта. Пожалуйста, улучшите свои ответы
Pieter Goosen
Голосую за. Не слушайте тех, кто говорит, что вы не должны были отвечать так плохо. Ваш ответ помог нам ;) спасибо
T.Todua
У меня не сработало, пришлось добавить encytype="multipart/form-data" в форму edit.php, используя принятый ответ здесь: https://stackoverflow.com/questions/46409457/files-consistently-empty-in-wordpress-post-meta-upload-box
Chad Reitsma