php - 在 Woocommerce 我的帐户下载部分显示产品图片

标签 php wordpress woocommerce hook-woocommerce woocommerce-subscriptions

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

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

这 3 个插件是:

Woocommerce 成员(member)资格

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 答案代码,它非常适合查看订单页面,我做了一些更改以使其适用于我的帐户/下载/部分。

这是我的代码尝试:

// 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 Subscriptions Downloads 可能是问题所在,但它对我来说是必须的插件。我可能只是没有做对或错过了什么,但我似乎无法找出是什么。

谁能帮我解决这个问题?那太棒了。

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

最佳答案

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

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

Now for Woocommerce Subscriptions Downloads, I don't know if the following will work.

所以正确的代码应该是:

// 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 文件。经过测试并有效。

关于php - 在 Woocommerce 我的帐户下载部分显示产品图片,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62946257/

相关文章:

php - 如何以及在哪里获取 'key' 然后在 get_post_meta() 中使用它?

php - WordPress 数据库和查询

PHP 按字母顺序排列

使用 header 位置和传输变量的 php 重定向

javascript - 如何在 Wordpress Fancybox 图像上将文本超链接到外部网站

javascript - 如何优化这个 jQuery 代码?

woocommerce 在服务器端计算价格

wordpress - woocommerce 中该类别的产品总数的类别名称

php - fatal error : Class not found in AppKernel. PHP

javascript - 如何正确访问我的 PHP 文件?直接来自 JS 还是通过 "master"PHP?