【发布时间】:2019-03-10 06:18:06
【问题描述】:
我正在创建一种为我的主题定制的可变产品,我设法出现在产品数据的下拉列表中,并且可以保存而不会引起冲突。问题是在前端看到产品会给我以下错误:
警告:为 foreach() 提供的参数无效 /Applications/MAMP/htdocs/canopy/wp-content/plugins/Woocommerce/includes/class-wc-product-variable.php 在第 83 行
我已将问题追溯到文件Wordpress/includes/data-stores/class-wc-product-variable-data-store-cpt.php,但事实是我不知道还能做什么。
我留下我为此编写的代码:
WC_Product_variable_canopytour.php
class WC_Product_Variable_CanopyTour extends WC_Product_Variable {
public function __construct( $product ) {
$this->product_type = 'variable_canopytour';
parent::__construct( $product );
}
public function get_type() {
return 'variable_canopytour';
}
}
class-woocommerce-custom-product.php
class WCB_Woocommerce_CanopyTour_Product_Type {
private $wcb;
private $version;
public function __construct( $wcb, $version ) {
$this->wcb = $wcb;
$this->version = $version;
}
public function register_canopytour_product_type() {
remove_action( 'woocommerce_single_product_summary', 'woocommerce_template_single_price', 10 );
include_once(get_template_directory() . 'woocommerce/WC_Product_variable_canopytour.php');
}
public function add_canopytour_product( $types ) {
$types[ 'variable_canopytour' ] = __( 'Variable Canopy Tour', $this->wcb );
return $types;
}
public function get_tour_product_class($classname, $product_type) {
if ( $product_type === "variable_canopytour" ) {
$classname = 'WC_Product_Variable_CanopyTour';
}
return $classname;
}
public function wcb_admin_footer() {
if ( 'product' != get_post_type() ) :
return;
endif;
?><script type='text/javascript'>
jQuery( document ).ready( function() {
jQuery( '.options_group.pricing' ).addClass( 'show_if_variable_canopytour show_if_simple show_if_external' ).show();
jQuery( 'li.general_options.general_tab' ).addClass( 'show_if_variable_canopytour show_if_simple show_if_external' ).show();
jQuery( '.variations_options.variations_tab' ).addClass( 'show_if_variable_canopytour' ).show();
jQuery( '.enable_variation' ).addClass( 'show_if_variable_canopytour' ).show();
});
</script><?php
}
function hide_wcb_data_panel( $tabs) {
// Other default values for 'attribute' are; general, inventory, shipping, linked_product, variations, advanced
$tabs['shipping']['class'][] = 'hide_if_variable_canopytour';
return $tabs;
}
}
functions.php
include_once get_template_directory() . 'includes/woocommerce/class-woocommerce-custom-product.php';
$woo_ct = new WCB_Woocommerce_CanopyTour_Product_Type( "wcb", "1.0" );
add_action( 'init', array($woo_ct, 'register_canopytour_product_type') );
add_filter( 'product_type_selector', array($woo_ct, 'add_canopytour_product') );
add_filter( 'woocommerce_product_class', array($woo_ct, 'get_tour_product_class'), 10, 2 );
add_action( 'admin_head', array($woo_ct, 'wcb_admin_head') );
add_filter( 'woocommerce_product_data_tabs', array($woo_ct, 'hide_wcb_data_panel') );
我希望有人能帮助我理解发生了什么:(
谢谢!
【问题讨论】:
-
您没有此自定义产品类型的价格?
-
是的,我已经配置了它们,但同样的错误不断出现
-
您是否覆盖了主题中的任何 WooCommerce 模板文件?您可以切换到 WordPress 默认主题并检查仍然出现相同的错误吗?
标签: php wordpress woocommerce