如何在WooCommerce中列出每个可下载产品的每个文件名?

时间:2013-04-22 08:39:21

标签: php wordpress woocommerce woothemes

我正在使用WooCommerce插件。在可下载产品中,如何显示文件名而不是产品名称?现在,可下载产品在“我的帐户”页面中显示如下:

title-->file1
title-->file2. 

现在我需要将文件列表显示为filename。例如:在“订单”页面中,它应该是这样的:

title-->Installer.zip(filename)
title-->Runner.zip(filename)

如何列出可下载产品列表中的每个文件名?

我使用的是WooCommerce 2.0.4

<?php
/**
 * My Account
 */

global $woocommerce;
?>

<?php $woocommerce->show_messages(); ?>

<p><?php printf( __('Hello, <strong>%s</strong>. From your account dashboard you can view your recent orders, manage your shipping and billing addresses and <a href="%s">change your password</a>.', 'kinetico'), $current_user->display_name, get_permalink(woocommerce_get_page_id('change_password'))); ?></p>

<?php do_action('woocommerce_before_my_account'); ?>

<?php if ($downloads = $woocommerce->customer->get_downloadable_products()) : ?>
<h2><?php _e('Available downloads', 'kinetico'); ?></h2>
<ul class="digital-downloads">

    <?php foreach ($downloads as $download) : ?>

        <li><?php if (is_numeric($download['downloads_remaining'])) : ?><span class="count"><?php echo $download['downloads_remaining'] . _n(' download Remaining', ' downloads remaining', $download['downloads_remaining'], 'kinetico'); ?></span><?php endif; ?> <a href="<?php echo esc_url( $download['download_url'] ); ?>"><?php echo $download['download_name']; ?></a></li>
     <?php echo    $download['download_name']; ?>
    <?php endforeach; ?>

</ul>
<?php endif; ?> 
<?php add_filter( 'woocommerce_available_download_link', 'filter_wc_downloads_so_16142748', 10, 2 );

function filter_wc_downloads_so_16142748( $link, $download )
{
    // Create a WC_Order object and get the file URLs for this product
    $order = new WC_Order( $download['order_id'] );
    $download_file_urls = $order->get_downloadable_file_urls( 
        $download['product_id'], 
        null, 
        $download['download_id'] 
    );

    // Check each download URL and compare with the current URL 
    // $key contains the real file URL and $value is the encoded URL
    foreach( $download_file_urls as $key => $value )
    {
        if( $value == $download['download_url'] )
        {
            $url_parts = explode( '/', parse_url( $key, PHP_URL_PATH ) );
            $file_name = end( $url_parts );
            $link = '<a href="' 
                . esc_url( $download['download_url'] ) 
                . '">' 
                . $download['download_name'] 
                . '</a> <small>( ' 
                . $file_name 
                . ' )</small>';
        }               
    }
    return $link;
}?>
<h2><?php _e('Recent Orders', 'kinetico'); ?></h2>
<?php woocommerce_get_template('myaccount/my-orders.php', array( 'recent_orders' => $recent_orders )); ?>

<h2><?php _e('My Address', 'kinetico'); ?></h2> 
<p><?php _e('The following addresses will be used on the checkout page by default.', 'kinetico'); ?></p>
<?php woocommerce_get_template('myaccount/my-address.php'); ?>

<?php
do_action('woocommerce_after_my_account');
add_filter( 'woocommerce_available_download_link', 'filter_wc_downloads_so_16142748', 10, 2 );

1 个答案:

答案 0 :(得分:1)

templates/myaccount/my-downloads.php中有一个有用的过滤器。

它需要一些扭曲,但是可以获得文件名。检查评论:

<?php
/**
 * Plugin Name: Add Filenames to WooCommerce Digital Downloads
 * Plugin URI:  http://stackoverflow.com/questions/16142748/
 * Author:      brasofilo
 * Author URI:  http://wordpress.stackexchange.com/users/12615/brasofilo
 */

add_filter( 'woocommerce_available_download_link', 'filter_wc_downloads_so_16142748', 10, 2 );

function filter_wc_downloads_so_16142748( $link, $download )
{
    // Create a WC_Order object and get the file URLs for this product
    $order = new WC_Order( $download['order_id'] );
    $download_file_urls = $order->get_downloadable_file_urls( 
        $download['product_id'], 
        null, 
        $download['download_id'] 
    );

    // Check each download URL and compare with the current URL 
    // $key contains the real file URL and $value is the encoded URL
    foreach( $download_file_urls as $key => $value )
    {
        if( $value == $download['download_url'] )
        {
            $url_parts = explode( '/', parse_url( $key, PHP_URL_PATH ) );
            $file_name = end( $url_parts );
            $link = '<a href="' 
                . esc_url( $download['download_url'] ) 
                . '">' 
                . $download['download_name'] 
                . '</a> <small>( ' 
                . $file_name 
                . ' )</small>';
        }               
    }
    return $link;
}

结果:

woocommerce downloads with file name


$download var包含:

array ( 
    'download_url' => 'http://example.com/?download_file=657&order=order_5192e53&email=user@email.com&key=49d12', 
    'download_id' => '49d1232377ed1752d5622b63786d089b', 
    'product_id' => '657', 
    'download_name' => 'Product title — File 1', 
    'order_id' => 659, 
    'order_key' => 'order_5192e536baf27', 
    'downloads_remaining' => '', 
)

这似乎是一个很好的功能,我可能会将其添加到我正在工作的网站。