Woocommerce 订阅 - 在订阅 ID 旁边添加产品名称

Posted

技术标签:

【中文标题】Woocommerce 订阅 - 在订阅 ID 旁边添加产品名称【英文标题】:Woocommerce Subscriptions - add product name next to subscription ID 【发布时间】:2017-03-11 21:18:28 【问题描述】:

我找不到专门针对 Woocommerce 订阅的论坛,所以我希望 Stack 可以帮助我!

在“我的订阅”页面上,有一个表格显示了客户的所有订阅。订阅由 ID 号命名。我想在 ID 旁边添加订阅产品名称。

这是插件中与将 ID 添加到表中相关的代码:

<?php foreach ( $subscriptions as $subscription_id => $subscription ) : ?>
    <tr class="order">
        <td class="subscription-id order-number" data-title="<?php esc_attr_e( 'ID', 'ultimatewoo-pro' ); ?>">
            <a href="<?php echo esc_url( $subscription->get_view_order_url() ); ?>"><?php echo esc_html( sprintf( _x( '#%s', 'hash before order number', 'ultimatewoo-pro' ), $subscription->get_order_number() ) ); ?></a>
            <?php do_action( 'woocommerce_my_subscriptions_after_subscription_id', $subscription ); ?>
        </td>
    </tr>
<?php endforeach; ?>

您会注意到有一个钩子可以用来在 ID 之后注入代码,并且我想出了如何做到这一点。问题是,如果我手动输入订阅 ID,我只能让它工作。

这是我的代码,其中 1341 是订阅 ID。这样就成功在表中的ID后面注入了1341的产品名称:

function custom_add_subscription_name_to_table() 

    $subscription = wcs_get_subscription(1341);

    foreach ( $subscription->get_items() as $item_id => $item ) 
        $_product  = apply_filters( 'woocommerce_subscriptions_order_item_product', $subscription->get_product_from_item( $item ), $item );

        if ( apply_filters( 'woocommerce_order_item_visible', true, $item ) ) 

            echo wp_kses_post( apply_filters( 'woocommerce_order_item_name', sprintf( '<a href="%s">%s</a>', get_permalink( $item['product_id'] ), $item['name'] ), $item ) );

        
    

add_action( 'woocommerce_my_subscriptions_after_subscription_id', 'custom_add_subscription_name_to_table', 35 );

问题是,我无法弄清楚如何将 ID 作为变量动态获取。如果我必须手动输入ID,我显然无法使用它。有没有办法做到这一点?

我觉得我很近,但又很远!

谢谢!

【问题讨论】:

【参考方案1】:

你很接近。你不需要 id 来做你正在做的事情。订阅正在通过 WordPress 挂钩系统传递到函数中。你只需要使用它。将您的代码更改为以下内容:

function custom_add_subscription_name_to_table( $subscription ) 

    foreach ( $subscription->get_items() as $item_id => $item ) 
        $_product  = apply_filters( 'woocommerce_subscriptions_order_item_product', $subscription->get_product_from_item( $item ), $item );

        if ( apply_filters( 'woocommerce_order_item_visible', true, $item ) ) 

            echo wp_kses_post( apply_filters( 'woocommerce_order_item_name', sprintf( '<a href="%s">%s</a>', get_permalink( $item['product_id'] ), $item['name'] ), $item ) );

        
    

add_action( 'woocommerce_my_subscriptions_after_subscription_id', 'custom_add_subscription_name_to_table', 35 );

【讨论】:

谢谢!这个完整的代码有效!我感谢您的解释。【参考方案2】:

如果您检查模板文件的来源,您会看到 do_action 调用如下所示:

do_action( 'woocommerce_my_subscriptions_after_subscription_id', $subscription )

这意味着在您添加的操作中,您可以访问传入的 $subscription 对象。

因此,将您的函数声明更改为如下所示:

function custom_add_subscription_name_to_table( $subscription )

这将使您能够访问您的函数中的 $subscription 对象!我不确定输出名称的确切代码是什么,但是您可以通过将其作为函数的第一行来轻松弄清楚:

var_dump($subscription)

这将打印出订阅对象中可供您使用的所有内容,并且我确定名称就在某处。可能只是echo $subscription-&gt;name;,但您需要仔细检查!

【讨论】:

谢谢格雷格。我很欣赏为什么我需要在我的函数声明中添加 $subscription 的解释。这将在未来帮助我。

以上是关于Woocommerce 订阅 - 在订阅 ID 旁边添加产品名称的主要内容,如果未能解决你的问题,请参考以下文章

在 WooCommerce 订阅中获取用户 ID

Woocommerce如何处理订阅结算?

从逗号分隔的订单ID中获取有效的WooCommerce订阅

以编程方式更新 WooCommerce 订阅订单行项目

如何使用 WooCommerce 订阅获取特定用户的订阅?

Woocommerce 订阅挂钩案例