【问题标题】:WooCommerce my account - downloads: listing all productsWooCommerce 我的帐户 - 下载:列出所有产品
【发布时间】:2020-10-27 15:48:53
【问题描述】:

在我的网站上,我只提供虚拟产品,这就是为什么我想在我的帐户 - 下载视图中进行更改。

我正在使用以下代码。

function filter_woocommerce_customer_available_downloads($downloads, $customer_id) { 

    // Manipulate download data here, this example we'll get the first 5 downloads in the array
    // $downloads = array_slice($downloads, 0, 5);
 // Sorting the array by Order Ids in DESC order
        arsort($downloads); 

    // Return first five downloads
    return $downloads;

}; 
// Add the filter, this tells wordpress to apply this filter every time available downloads is called
add_filter( 'woocommerce_customer_available_downloads', 'filter_woocommerce_customer_available_downloads', 10, 2 );

/**
 * Group Downloadable products by product ID
 *
 * @param array $downloads
 * @return array
 */
function prefix_group_downloadable_products( array $downloads ) {
    $unique_downloads = [];

    foreach ($downloads as $download ) {
        $list = [
            'download_url' => $download['download_url'],
            'file_name'    => $download['file']['name'],
            'orderid'  => $download['order_id']
        ];


        if ( array_key_exists( $download['product_id'], $unique_downloads ) ) {
            $unique_downloads[ $download['product_id'] ]['list'][] = $list;
            continue;
        }



        $data = $download;
        $data['list'] = [ $list ];
        $unique_downloads[ $download['product_id'] ] = $data;
    }

    return $unique_downloads;
}

add_filter( 'woocommerce_customer_get_downloadable_products', 
'prefix_group_downloadable_products' );

/**
 * Show number list of downloadable files for group product
 *
 * @param array $download
 * @return void
 */

function prefix_downloads_column_download_file( array $download ) {


    $lists = $download['list'];

            // Sorting the array by Order Ids in DESC order
        arsort($lists); 

    if ( empty( $lists ) ) {
        _e( 'No Download Files', 'storefront' );
        return;
    }




    echo '<ul class="charliesub">';
    echo '<li class="accordion">';
    echo '<h3>' .  $order_date . '</h3>';
    echo '<div>';

     echo '<ol>';

    foreach ( $lists as $list ) {
    // Get $order object from order ID 
$order = wc_get_order( $list['orderid']  );

  $order_date = $order->get_date_completed();


         echo '<li>';
        echo '<a href="' . esc_url( $list['download_url'] ) . '" class="woocommerce-MyAccount-downloads-file">';
        echo esc_html( $list['file_name'] );
        echo '</a></li>';
    }

    echo '</ol>';
        echo '</div>';
        echo '</li>';
            echo '</ul>';

}

add_action( 'woocommerce_account_downloads_column_download-file', 'prefix_downloads_column_download_file' );

但是,订单日期显示在每个下载链接上方。

我需要只有日期在所有链接上方一次。 (按照我想要的方式放置在&lt;h3&gt; 标签中)。

谁能帮助我进一步进行调整?

【问题讨论】:

    标签: php wordpress woocommerce product hook-woocommerce


    【解决方案1】:

    在foreach循环中你可以将值存储在一个变量中而不是打印(echo)。

    在 foreach 之后你可以打印变量

    function filter_woocommerce_customer_available_downloads($downloads, $customer_id) { 
        // Manipulate download data here, this example we'll get the first 5 downloads in the array
        // $downloads = array_slice($downloads, 0, 5);
        // Sorting the array by Order Ids in DESC order
        arsort($downloads); 
    
        // Return first five downloads
        return $downloads;
    }
    add_filter( 'woocommerce_customer_available_downloads', 'filter_woocommerce_customer_available_downloads', 10, 2 );
    
    /**
     * Group Downloadable products by product ID
     *
     * @param array $downloads
     * @return array
     */
    function prefix_group_downloadable_products( array $downloads ) {
        $unique_downloads = [];
    
        foreach ($downloads as $download ) {
            $list = [
                'download_url' => $download['download_url'],
                'file_name'    => $download['file']['name'],
                'orderid'      => $download['order_id']
            ];
    
            if ( array_key_exists( $download['product_id'], $unique_downloads ) ) {
                $unique_downloads[ $download['product_id'] ]['list'][] = $list;
                continue;
            }
    
            $data = $download;
            $data['list'] = [ $list ];
            $unique_downloads[ $download['product_id'] ] = $data;
        }
    
        return $unique_downloads;
    }
    add_filter( 'woocommerce_customer_get_downloadable_products', 'prefix_group_downloadable_products', 10, 1 );
    
    /**
     * Show number list of downloadable files for group product
     *
     * @param array $download
     * @return void
     */
    function prefix_downloads_column_download_file( array $download ) {
        $lists = $download['list'];
    
        // Sorting the array by Order Ids in DESC order
        arsort($lists); 
    
        if ( empty( $lists ) ) {
            _e( 'No Download Files', 'storefront' );
            return;
        }
    
        // Set variable
        $li = '';
    
        foreach ( $lists as $list ) {
            // Get $order object from order ID 
            $order = wc_get_order( $list['orderid']  );
    
            $order_date = $order->get_date_completed();
    
            // Append to
            $li .= '<li><a href="' . esc_url( $list['download_url'] ) . '" class="woocommerce-MyAccount-downloads-file">' . esc_html( $list['file_name'] ) . '</a></li>';
        }
    
        echo '<ul class="charliesub">';
        echo '<li class="accordion">';
        echo '<h3>' .  $order_date . '</h3>';
        echo '<div>';
        echo '<ol>';
    
        echo $li;
    
        echo '</ol>';
        echo '</div>';
        echo '</li>';
        echo '</ul>';
    }
    add_action( 'woocommerce_account_downloads_column_download-file', 'prefix_downloads_column_download_file' );
    

    【讨论】:

    • 嗨!我还不能投票……但你的回答很棒!我已经检查过了:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-19
    • 2018-01-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多