【问题标题】:Display product image on Woocommerce My Account Downloads section在 Woocommerce 我的帐户下载部分显示产品图片
【发布时间】:2020-07-17 02:37:50
【问题描述】:

我遇到了一个我似乎无法解决的问题。我正在尝试将产品图片添加到 my-account/downloads/ 部分中的每个项目。我尝试了多个找到的代码,但似乎没有一个对我有用。

我正在使用 3 个插件,而所有其他插件都被禁用,试图解决这个问题。这 3 个插件是必需的,所以我需要它来激活所有 3 个插件。

这3个插件是:

Woocommerce 会员资格

Woocommerce 订阅

Woocommerce 订阅下载

我所有的产品都是虚拟的,所以我需要在下载部分的名称旁边放一张图片。我正在把头发拉出来......无论如何,对于我尝试过的事情。

我已经尝试过在This form post找到的这段代码

function my_account_downloads_column_download_product( $download ) {
    // Get $product object from product ID
    $product = wc_get_product( $download['product_id'] );
    
    // Get thumbnail
    $thumbnail = $product->get_image(array( 36, 36)); // Get the product thumbnail (from product object)
    
    // Image found
    if( $product->get_image_id() > 0 ) {
        $item_name = '<div class="item-thumbnail">' . $thumbnail . '</div>';
        echo $item_name;
    }

    echo '<a href="' . $product->get_permalink() . '">' . $product->get_name() . '</a>';
 }

我也尝试了该表单中的其他代码,但它们对我不起作用。

基于 Add the product image to Woocommerce my account order view 答案代码,它适用于查看订单页面,我进行了一些更改以使其适用于 my-account/downloads/ 部分。

这是我的代码尝试:

// Display the product thumbnail in order view pages
add_filter( 'woocommerce_my_account_my_downloads_title', 'display_product_image_in_downloads', 20, 3 
    );
function display_product_image_in_downloads( $item_name, $item, $is_visible ) {
    // Targeting view order pages only
    if( is_wc_endpoint_url( 'downloads' ) ) {
        $product       = $item->get_product(); // Get the WC_Product object (from order item)
        $product_image = $product->get_image(array( 80, 80)); // Get the product thumbnail (from product 
    object)
        $item_name     = '<div class="item-thumbnail">' . $product_image . '</div>' . $item_name;
    }
    return $item_name;
}

我将woocommerce_my_account_my_downloads_title 更改为我能在Woocommerce Hook Reference page 上找到的与下载相关的所有内容

但是,它们似乎都不适合我。

我尝试通过将模板文件复制到我的 childtheme/woocommerce/order/order-downloads.php、childtheme/woocommerce/myaccount/downloads.php 和 childtheme/woocommerce/myaccount/my-downloads.php 来修改模板文件.我无法让它工作,所以我从我的 childtheme 中删除了它,并在我的 childthemes functions.php 文件中尝试了上面的代码。

我已经在互联网上搜寻了一个解决方案,但似乎每一个都不适合我。我感觉 Woocommerce 订阅下载 可能是问题所在,但它对我来说是必须的插件。我可能只是没有做对或错过了什么,但我似乎无法找出什么。

有人可以帮我解决这个问题吗?那太棒了。

我想要的只是可下载产品旁边的产品图片。我只销售可下载的产品,有数百种产品。图片只会帮助客户更轻松地找到他们想要下载的内容。

【问题讨论】:

    标签: php wordpress woocommerce hook-woocommerce woocommerce-subscriptions


    【解决方案1】:

    在我的帐户下载部分,相关模板是myaccount/downloads.php。 此模板调用order/order-downloads.php 来显示下载表。

    所以要使用的正确钩子是woocommerce_account_downloads_column_{$column_id} 复合动作钩子,其中**$column_id** 是download-product 来定位产品名称。

    现在对于 Woocommerce 订阅下载,我不知道以下是否可行。

    所以正确的代码是:

    // Display the product thumbnail in order view pages
    add_filter( 'woocommerce_account_downloads_column_download-product', 'display_product_image_on_account_downloads' );
    function display_product_image_on_account_downloads( $download ) {
        // Targeting view order pages only
        if ( ! is_wc_endpoint_url( 'downloads' ) ) return;
    
        if ( $download['product_id'] > 0 ) {
            $product = wc_get_product( $download['product_id'] ); // The product object
            $image   = $product->get_image( array(50, 50) ); // The product image
    
            if ( $download['product_url'] ) {
                echo $image . '<a href="' . esc_url( $download['product_url'] ) . '">' . esc_html( $download['product_name'] ) . '</a>';
            } else {
                echo $image . esc_html( $download['product_name'] );
            }
        }
    }
    

    代码在您的活动子主题(或活动主题)的functions.php 文件中。经过测试并且可以工作。

    【讨论】:

    • @JohnN 如果这个答案回答了你的问题,你可以请accept回答,谢谢。
    【解决方案2】:

    @LoicTheAztec 的答案有效,但我对其进行了一些更改,因为:
    在订购数字产品时,order-received 端点上也会调用order-downloads.php 内容。 因此,当使用if ( ! is_wc_endpoint_url( 'downloads' ) ) return; 时,它会在/my-account/downloads 页面上显示图像,但/checkout/order-received 上的产品标题字段将变为空。没有产品标题,也没有图片。

    所以,我通过更改解决了这个问题:
    if ( ! is_wc_endpoint_url( 'downloads' ) ) return;

    if ( is_wc_endpoint_url( array ('downloads' , 'order-received') )) return;

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-24
      相关资源
      最近更新 更多