Для изменения функциональности загрузки товара в WooCommerce так, чтобы файлы товара хранились на YandexDisk и пользователи могли скачивать их по ссылке, вам понадобится немного кодирования.
Первым шагом будет необходимость создать два дополнительных поля метаданных для товаров в WooCommerce, которые будут хранить ссылку на файл на YandexDisk и его имя. Вы можете сделать это, используя WordPress функцию add_action
и хук woocommerce_product_options_general_product_data
:
add_action('woocommerce_product_options_general_product_data', 'yandexdisk_file_fields'); function yandexdisk_file_fields() { global $woocommerce, $post; echo '<div class="options_group">'; woocommerce_wp_text_input( array( 'id' => 'yandexdisk_file_link', 'label' => __('YandexDisk File Link', 'woocommerce'), 'placeholder' => 'https://yadi.sk/d/example', 'class' => '' ) ); woocommerce_wp_text_input( array( 'id' => 'yandexdisk_file_name', 'label' => __('YandexDisk File Name', 'woocommerce'), 'placeholder' => 'example.txt', 'class' => '' ) ); echo '</div>'; }
Затем, вам нужно сохранить эти значения метаданных товара в базе данных при сохранении товара. Для этого вы можете использовать такой код:
add_action('woocommerce_process_product_meta', 'yandexdisk_file_save'); function yandexdisk_file_save($post_id){ $yandexdisk_file_link = isset($_POST['yandexdisk_file_link']) ? $_POST['yandexdisk_file_link'] : ''; update_post_meta($post_id, 'yandexdisk_file_link', esc_attr($yandexdisk_file_link)); $yandexdisk_file_name = isset($_POST['yandexdisk_file_name']) ? $_POST['yandexdisk_file_name'] : ''; update_post_meta($post_id, 'yandexdisk_file_name', esc_attr($yandexdisk_file_name)); }
Теперь нужно изменить способ отображения загрузки товара на странице товара. Для этого вам нужно переопределить шаблон цикла загрузки, используя WooCommerce фильтр woocommerce_loop_add_to_cart_link
.
add_filter('woocommerce_loop_add_to_cart_link', 'yandexdisk_download_link', 10, 2); function yandexdisk_download_link($link, $product){ $yandexdisk_file_link = get_post_meta($product->get_id(), 'yandexdisk_file_link', true); $yandexdisk_file_name = get_post_meta($product->get_id(), 'yandexdisk_file_name', true); if ($yandexdisk_file_link && $yandexdisk_file_name){ $link = '<a href="' . esc_url($yandexdisk_file_link) . '" class="button">' . __('Download', 'woocommerce') . '</a>'; } return $link; }
Таким образом, после добавления этого кода в вашу тему WordPress, ссылка на скачивание товара будет заменена ссылкой на YandexDisk, если вы заполните поля метаданных для товара со ссылкой на файл и его именем.