Estoy creando un tipo de producto variable personalizado para mi tema, he logrado que aparezca en el desplegable de datos del producto y eso se puede guardar sin causar conflicto. El problema es que al ver el producto en frontend me da el siguiente error:
Advertencia: Argumento no válido proporcionado para foreach() en
/Aplicaciones/MAMP/htdocs/canopy/wp-content/plugins/Woocommerce/includes/class-wc-product-variable.php
en la línea 83
He rastreado el problema hasta el archivo. WordPress/includes/data-stores/class-wc-product-variable-data-store-cpt.php
pero la verdad es que ya no se que mas hacer.
Dejo el código que escribí para esto:
WC_Producto_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';
}
}
clase-woocommerce-producto-personalizado.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;
}
}
funciones.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') );
Espero que alguien pueda ayudarme a entender lo que sucede 🙁
¡Gracias!
¿No tienes precios para este tipo de producto personalizado?
– Subcontratar WordPress
10 de octubre de 2018 a las 9:06
Si, los he configurado y sigue saliendo el mismo error
– Jesús Magallón
10 oct 2018 a las 15:49
¿Está anulando algún archivo de plantilla de WooCommerce en su tema? ¿Puedes cambiar al tema predeterminado de WordPress y comprobar que sigue apareciendo el mismo error?
– Subcontratar WordPress
10 oct 2018 a las 16:14