首页 > 解决方案 > 在下拉列表中显示 WooCommerce 变量订阅及其变体

问题描述

我一直在创建一个插件,我正在尝试将所有 woo 商务订阅和订阅产品中的变体拉到下拉列表中。

我已成功将顶级产品拉入下拉列表,但由于某种原因,该产品的变体未显示在我的列表中。

有任何想法吗?

这是我认为将产品添加到列表中的代码。我是否需要更改类型才能将变体添加到列表中,而不仅仅是顶级产品?

// get product list...
          $query = new WC_Product_Query( array(
              'limit' => -1,
              'orderby' => 'date',
              'order' => 'DESC',
              'return' => 'all',
              'type' => array('variable-subscription', 'subscription')
          ) );

   

标签: phpwordpresswoocommercewoocommerce-subscriptionsproduct-variations

解决方案


下面的代码将显示所有 WooCommerce 订阅产品(简单订阅、可变订阅及其订阅可用变体:

// Get all Subscription products
$subscription_products = wc_get_products( array(
    'type'  => array('variable-subscription', 'subscription'),
    'limit'     => -1,
    'orderby' => 'date',
    'order'     => 'DESC'
) );

if ( ! empty($subscription_products) ):

$html = '<div class="products-dropdown"><select name="products-select" id="products-select">
<option value="">'.__('Choose some other product').'</option>';

foreach( $subscription_products as $product ) {

    $html .= '<option value="'.$product->get_id().'">'.$product->get_name().'</option>';

    // Get Subscription variation (from variable subscription product)
    if( $product->is_type('variable-subscription') ) {
        print_pr(($product->get_id(). ' ' . $product->get_name()));

        // Loop through subscription variations
        foreach( $product->get_children() as $variation_id ) {
            // Get the WC_Product_Variation object
            $variation = wc_get_product( $variation_id );
            
            // The available subscription variation
            if( $variation->variation_is_visible() ) {
                $html .= '<option value="'.$variation_id.'">'.$variation->get_name().' (variation)</option>';
            }
        }
    }

}

$html .= '</select><p style="margin-top:1em;">';

$html .= '<a href="#" data-quantity="1" class="button alt disabled off" data-product_id="" data-product_sku="" rel="nofollow">Add to cart</a>';

// Output
echo $html . '</p></div>';

endif;

测试和工作。


推荐阅读