Вопрос или проблема
Существует ли способ добавить, например, MP3 файл к продукту WooCommerce из PHP, а не из панели управления?
Смотря в базу данных, я вижу, что downloadable_files выглядит как сериализованное поле данных, которое это обрабатывает. Но мне интересно, существуют ли более прямые, рекомендуемые способы через API? Что-то вроде $product->put_files()?
Создайте метабокс для администратора в редактировании отдельного продукта. Я использую плагин вместо попытки добавить его в дочернюю тему или функции.
//добавить метабокс woocommerce к редактору продукта
add_action( 'woocommerce_product_options_general_product_data', 'plugin_add_audio_meta_box' );
function plugin_add_audio_meta_box()
{ ....
<tr>
<td class="file_url">
<input type="text" class="input_text"
placeholder="<?php esc_attr_e( "http://", 'plugin' ); ?>"
name="_plugin_two"
value="<?php echo $plugin_fileurl; ?>" />
</td>
<td class="file_url_choose" width="1%">
<a href="#" class="button upload_file_button"
data-choose="<?php esc_attr_e( 'Выберите файл', 'plugin' ); ?>"
data-update="<?php esc_attr_e( 'Вставьте URL файла', 'plugin' ); ?>">
<?php echo str_replace( ' ', ' ', __( 'Выберите файл', 'plugin' ) ); ?></a>
</td>
</tr>
.... }
function save_fields ...
update_post_meta( $post_id, ....
Затем вызовите файл где угодно на фронтальной стороне:
<p><?php
$attr = array(
'src' => strip_tags($plugin_fileurl),
'loop' => 'true',
'autoplay' => '',
'preload' => 'none',
);
echo '<div class="audio-player" itemprop="audio">' . wp_audio_shortcode( $attr ) . ' </div>';
/* echo do_shortcode(''.esc_url($plugin_fileurl).''); */
?></p>
.
Ответ или решение
Программное создание загружаемого продукта в WooCommerce
Если вы хотите добавить загружаемый продукт, например, MP3 файл, в WooCommerce с помощью PHP, вы можете использовать встроенные инструменты и API, которые предлагает платформа. Я расскажу, как это сделать, включая создание метабокса в админской части и сохранение продуктов с загружаемыми файлами.
Шаг 1: Создание загружаемого продукта через PHP
Для начала, создадим функцию, которая будет создавать продукт с заданным типом — "загружаемый". Вы можете использовать функцию wp_insert_post
для добавления нового продукта.
function create_downloadable_product($file_path) {
// Убедимся, что файл существует
if (!file_exists($file_path)) {
return new WP_Error('file_not_found', __('Файл не найден', 'text-domain'));
}
// Создаем новый продукт
$product = new WC_Product();
// Устанавливаем заголовок, тип и статус
$product->set_name('Название вашего продукта');
$product->set_type('downloadable');
$product->set_status('publish');
// Устанавливаем цену
$product->setRegularPrice('10.00'); // Установите свою цену
// Добавляем файл
$file_url = wp_upload_bits(basename($file_path), null, file_get_contents($file_path));
if ($file_url['error']) {
return new WP_Error('upload_error', __('Ошибка загрузки файла', 'text-domain'));
}
// Устанавливаем файл как загружаемый
$product->set_downloads(array(array(
'name' => basename($file_path),
'file' => $file_url['url'],
)));
// Сохраняем продукт
$product->save();
return $product->get_id();
}
// Пример использования
$file_path = '/path/to/your/file.mp3'; // Укажите путь к вашему MP3 файлу
$product_id = create_downloadable_product($file_path);
Шаг 2: Создание метабокса для загрузки файлов в админке
Если вы хотите добавлять файлы через интерфейс администратора, вам нужно создать метабокс. Это позволяет администратору загрузить файл прямо из панели управления.
add_action('woocommerce_product_options_general_product_data', 'custom_audio_meta_box');
function custom_audio_meta_box() {
global $post;
echo '<div class="options_group">';
woocommerce_wp_text_input(array(
'id' => '_audio_file_url',
'label' => __('URL аудиофайла', 'text-domain'),
'description' => __('Введите URL вашего аудиофайла', 'text-domain'),
'desc_tip' => 'true',
));
echo '</div>';
}
add_action('woocommerce_process_product_meta', 'save_custom_audio_meta');
function save_custom_audio_meta($post_id) {
$audio_file_url = isset($_POST['_audio_file_url']) ? sanitize_text_field($_POST['_audio_file_url']) : '';
update_post_meta($post_id, '_audio_file_url', $audio_file_url);
}
Шаг 3: Использование загружаемого товара на фронтенде
Чтобы отобразить загружаемый продукт на фронтенде, вы можете использовать следующее:
add_action('woocommerce_single_product_summary', 'display_audio_player', 25);
function display_audio_player() {
global $post;
$audio_file_url = get_post_meta($post->ID, '_audio_file_url', true);
if (!empty($audio_file_url)) {
echo '<div class="audio-player" itemprop="audio">' . wp_audio_shortcode(array('src' => esc_url($audio_file_url))) . '</div>';
}
}
Заключение
При выполнении всех этих шагов вы сможете программно создать загружаемый продукт в WooCommerce, а также предоставить возможность загрузки файлов через интерфейс администратора. Использование API WooCommerce делает процесс гораздо более удобным и безопасным, гарантируя, что все данные сохраняются в правильном формате.
Не забывайте тестировать функции в безопасной среде, прежде чем внедрять их на рабочий сайт. Правильная миграция контента и тестирование помогут избежать проблем в будущем. При наличии различных требований вашего проекта можно дополнительно модифицировать этот функционал для реализации специфических нужд.