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

时间:2016-10-28 22:52:51

标签: php wordpress woocommerce subscriptions

我找不到专门针对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,我显然无法使用它。有没有办法做到这一点?

我觉得我很亲密,但到目前为止!

谢谢!

2 个答案:

答案 0 :(得分:2)

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

do_action( 'woocommerce_my_subscriptions_after_subscription_id', $subscription )

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

因此,将函数声明更改为:

function custom_add_subscription_name_to_table( $subscription ) {

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

var_dump($subscription)

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

答案 1 :(得分:1)

你很亲密。你不需要你正在做什么的id。订阅正由WordPress钩子系统传递给该函数。你只需要使用它。将您的代码更改为以下内容:

find -name \*php | xargs sed -i 's/<?php.*$/<?php/'