Php 在我的帐户下载部分显示产品图像

Php 在我的帐户下载部分显示产品图像,php,wordpress,woocommerce,hook-woocommerce,woocommerce-subscriptions,Php,Wordpress,Woocommerce,Hook Woocommerce,Woocommerce Subscriptions,我有一个我似乎无法解决的问题。我正在尝试将产品图像添加到“我的帐户/下载”部分的每个项目中。我已经尝试了多种代码,但似乎没有一种适合我 我正在使用3个插件和所有其他插件禁用试图找出这个问题。这3个插件是必需的,所以我需要这3个插件都激活 这3个插件是: Woocommerce会员资格 电子商务订阅 Woocommerce订阅下载 我所有的产品都是虚拟的,所以我需要在下载部分在它们的名字旁边有一个图像。我在这里拉扯我的头发。。。不管怎样,对我尝试过的事情 我已经尝试了在中找到的代码 功能我的账户下

我有一个我似乎无法解决的问题。我正在尝试将产品图像添加到“我的帐户/下载”部分的每个项目中。我已经尝试了多种代码,但似乎没有一种适合我

我正在使用3个插件和所有其他插件禁用试图找出这个问题。这3个插件是必需的,所以我需要这3个插件都激活

这3个插件是:

Woocommerce会员资格

电子商务订阅

Woocommerce订阅下载

我所有的产品都是虚拟的,所以我需要在下载部分在它们的名字旁边有一个图像。我在这里拉扯我的头发。。。不管怎样,对我尝试过的事情

我已经尝试了在中找到的代码

功能我的账户下载列下载产品($download){
//从产品ID获取$product对象
$product=wc_get_product($download['product_id']);
//获取缩略图
$thumbnail=$product->get_image(数组(36,36));//获取产品缩略图(从产品对象)
//找到图像
如果($product->get\u image\u id()>0){
$item_name='.$thumbnail';
echo$item_name;
}
回声';
}
我也试过了该表单中的其他代码,但它们对我不起作用

基于对查看订单页面非常有效的应答代码,我做了一些更改,试图使其适用于我的帐户/下载/部分

以下是我的代码尝试:

// 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\u my\u account\u my\u downloads\u title','display\u product\u image\u in\u downloads',20,3
);
函数显示\产品\图像\在\下载中($item\名称,$item$可见){
//仅针对查看订单页面
如果(是_wc_endpoint_url('downloads')){
$product=$item->get_product();//获取WC_产品对象(从订单项)
$product\U image=$product->get\U image(数组(80,80));//获取产品缩略图(来自product)
(对象)
$item_name='.$product_image'.$item_name;
}
返回$item_name;
}
我把
woocommerce\u我的\u帐户\u我的\u下载\u标题
改成了我能在网上找到的每一个与下载相关的标题

然而,它们似乎都不适合我

我试图通过将模板文件复制到我的childtheme/woocommerce/order/order-downloads.php、childtheme/woocommerce/myaccount/downloads.php和childtheme/woocommerce/myaccount/my-downloads.php来修改模板文件。我无法实现这些功能,因此我将其从childtheme中删除,并在childthemes functions.php文件中尝试上面的代码

我在互联网上搜索,试图找到一个解决方案,但是,它们中的每一个似乎都不适合我。我有一种感觉,Woocommerce订阅下载可能是个问题,但对我来说这是一个必须的插件。我可能只是做得不对或错过了什么,但我似乎不知道是什么

有人能帮我弄清楚吗?那太棒了


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

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

因此,要使用的右钩子是
woocommerce\u account\u downloads\u column{$column\u id}
复合操作钩子,其中**
$column\u id
**是
下载产品
,以产品名称为目标

现在对于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'] );
        }
    }
}
//在订单视图页面中显示产品缩略图
添加过滤器('woocommerce\u account\u downloads\u column\u download-product','display\u product\u image\u on\u account\u downloads');
功能显示\产品\图像\帐户\下载($download){
//仅针对查看订单页面
如果(!is_wc_endpoint_url('downloads'))返回;
如果($download['product_id']>0){
$product=wc_get_product($download['product_id']);//产品对象
$image=$product->get_image(数组(50,50));//产品映像
如果($download['product_url'])){
echo$图像。“;
}否则{
echo$image.esc_html($download['product_name']);
}
}
}

代码进入活动子主题(或活动主题)的functions.php文件。测试和工作。

@LoicTheAztec的答案有效,但我对它做了一点修改,因为:
订购数字产品时,
order downloads.php
内容也会在
order received
端点上调用。 所以当使用
if(!is_wc_endpoint_url('downloads')返回时-它将在
/my account/downloads
页面上显示图像,但
/checkout/order received
上的产品标题字段将变为空。没有产品名称,也没有图像

因此,我通过改变:
if(!is_wc_endpoint_url('downloads')返回


if(is_wc_endpoint_url(数组('downloads','order received'))返回

@JohnN如果这个答案回答了你的问题,你可以请你回答,谢谢。
// 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'] );
        }
    }
}