php - 在下拉列表中显示 WooCommerce 变量订阅及其变体
问题描述
我一直在创建一个插件,我正在尝试将所有 woo 商务订阅和订阅产品中的变体拉到下拉列表中。
我已成功将顶级产品拉入下拉列表,但由于某种原因,该产品的变体未显示在我的列表中。
有任何想法吗?
这是我认为将产品添加到列表中的代码。我是否需要更改类型才能将变体添加到列表中,而不仅仅是顶级产品?
// get product list...
$query = new WC_Product_Query( array(
'limit' => -1,
'orderby' => 'date',
'order' => 'DESC',
'return' => 'all',
'type' => array('variable-subscription', 'subscription')
) );
解决方案
下面的代码将显示所有 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;
测试和工作。
推荐阅读
- kubernetes - 使用注释启用旧版 TLS
- mysql - IS NULL 时无法更新 mysql
- python - 如何在数据框中查找具有整数值的列并在python中的所有整数或浮点值周围添加引号?
- menu - 我的下拉菜单不会显示,我该怎么办?
- html - Web 应用程序缺少滚动条且无法滚动
- javascript - 未捕获的 SyntaxError:JSON.parse 处的 JSON 输入意外结束(
) 在 XMLHttpRequest。 ((指数):32) - javascript - 审查 html 页面上的单词
- node.js - 是否有必要在使用 node.js 从 lambda 函数返回响应时发送 statusCode?
- html - Bootstrap 在右侧添加更多边距
- python - 给定一个已知多项式,如何在不同的数据集上计算具有相同多项式的误差/残差?