WooCommerce — скачивание товара поменять на ссылку YandexDisk?

Для изменения функциональности загрузки товара в 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, если вы заполните поля метаданных для товара со ссылкой на файл и его именем.