Woocommerce 订阅 - 在订阅 ID 旁边添加产品名称
Woocommerce Subscriptions - add product name next to subscription ID
我找不到专门针对 Woocommerce 订阅的论坛,所以我希望 Stack 可以帮助我!
在 "My Subscriptions" 页面上,有一个 table 显示客户的所有订阅。订阅以 ID 号命名。我想在 ID 旁边添加订阅产品名称。
这是插件中的代码,用于将 ID 添加到 table:
<?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。这成功地在 table:
中的 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,我显然不能使用它。有什么办法吗?
我觉得我很近,但又很远!
谢谢!
如果您检查模板文件的来源,您会看到 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->name;
,但您需要仔细检查!
你很接近。你不需要 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 );
我找不到专门针对 Woocommerce 订阅的论坛,所以我希望 Stack 可以帮助我!
在 "My Subscriptions" 页面上,有一个 table 显示客户的所有订阅。订阅以 ID 号命名。我想在 ID 旁边添加订阅产品名称。
这是插件中的代码,用于将 ID 添加到 table:
<?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。这成功地在 table:
中的 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,我显然不能使用它。有什么办法吗?
我觉得我很近,但又很远!
谢谢!
如果您检查模板文件的来源,您会看到 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->name;
,但您需要仔细检查!
你很接近。你不需要 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 );