Подписки Woocommerce — добавьте название продукта рядом с идентификатором подписки

Я не могу найти форум специально для подписок Woocommerce, так что я надеюсь, что Стек поможет мне!

На странице «Мои подписки» есть таблица, в которой отображаются все подписки клиента. Подписки именуются по идентификационному номеру. Я хочу добавить название продукта подписки рядом с идентификатором.

Вот код из плагина, который относится к добавлению идентификатора в таблицу:

<?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; ?>

Вы заметите, что есть ловушка, которую я могу использовать для ввода кода после идентификатора, и я понял, как это сделать. Проблема в том, что я могу заставить его работать, только если вручную ввести идентификатор подписки.

Вот мой код, где 1341 — идентификатор подписки. Это успешно вводит название продукта для 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 );

Проблема, я не могу понять, как получить идентификатор динамически в качестве переменной. Я, очевидно, не могу использовать его, если мне нужно вручную ввести идентификатор. Есть какой-либо способ сделать это?

Я чувствую себя так близко, но так далеко!

Спасибо!

4

Решение

Вы близки. Вам не нужен идентификатор для того, что вы делаете. Подписка передается в функцию через систему перехватчиков 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 );
1

Другие решения

Если вы проверите источник файла шаблона, вы увидите, что вызов 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;, но вы захотите перепроверить!

2

По вопросам рекламы [email protected]