root_product_id = $this->get_parent($id);
// If it's a variable product
if ($id !== $this->root_product_id) {
$this->variation_id = $id;
}// Simple product and others
else {
$this->variation_id = $this->root_product_id;
}
$this->product = wc_get_product($id);
$config = get_post_meta($this->variation_id, 'product-asowp-metas', true);
if (isset($config[$this->variation_id])) {
$config_id_val = $config[$this->variation_id];
if (isset($config_id_val['config-id']) && !empty($config_id_val['config-id']) && is_numeric($config_id_val['config-id'])) {
$this->settings = get_post_meta($config_id_val['config-id'], 'asowp-configs-meta', true);
}
}
}
}
/**
* All hooks related to attaching a product config
*/
public function init_hooks()
{
add_action('woocommerce_product_options_general_product_data', array($this, 'get_product_config_selector'));
add_action('woocommerce_product_after_variable_attributes', array($this, 'get_variation_product_config_selector'), 10, 3);
add_action('woocommerce_save_product_variation', array($this, 'save_config'));
add_action('save_post_product', array($this, 'save_config'));
add_filter('manage_edit-product_columns', array($this, 'get_product_columns'), 10);
add_action('manage_product_posts_custom_column', array($this, 'get_products_columns_values'), 10, 2);
add_action('woocommerce_after_add_to_cart_button', array($this, 'hide_cart_button'));
add_action('woocommerce_after_add_to_cart_button', array($this, 'get_customize_btn'));
add_filter('woocommerce_loop_add_to_cart_link', array($this, 'hide_or_display_custom_button_or_add_to_cart_button'), 10, 2);
add_action('woocommerce_single_product_summary', array($this, 'get_button_on_single_product_summary'), 5);
add_action('woocommerce_cart_item_removed', [$this, 'delete_product_file_when_delete_product'], 10, 2);
}
/**
* @param int $id lidentifier of the product
* @return int the identifier of the parent of the product
* if it is a variable product otherwise returns the same identifier
*/
public function get_product_parent_ID(int $id)
{
$variable_product = wc_get_product($id);
if (!$variable_product) {
return false;
}
if ($variable_product->is_type('variable')) {
$product_id = $id;
} else {
$product_id = $variable_product->get_parent_id();
}
return $product_id;
}
/**
* Configuration Selector from product admin page
*/
public function get_product_config_selector()
{
$id = get_the_ID();
$args = array(
'post_type' => 'asowp-configs',
'nopaging' => true,
);
$configs = get_posts($args);
$configs_ids = array(['' => 'None']);
foreach ($configs as $config) {
$configs_ids[$config->ID] = ['title' => $config->post_title];
}
?>
display_asowp_config_on_WC_product_config($id, $configs_ids, __('Attach this product to All Signs Options configuration', "all-signs-options-free"));
?>
" .
"
" . esc_html($title) . "
" .
"
" .
"";
$container .= "";
$container .= "
";
// Définition des balises HTML autorisées et de leurs attributs
$allowed_html = array(
'div' => array(
'class' => array(),
),
'h2' => array(),
'select' => array(
'name' => array(),
),
'option' => array(
'value' => array(),
'selected' => array(),
),
'input' => array(
'type' => array(),
'name' => array(),
'value' => array(),
),
);
echo wp_kses($container, $allowed_html);
}
/**
* Assign configuration to product variation
*/
public function get_variation_product_config_selector($loop, $variation_data, $variation)
{
$id = $variation->ID;
// Ici, vous pouvez ajouter un code spécifique si nécessaire pour chaque variation
// par exemple, vérifier les propriétés ou les attributs de la variation, si vous avez besoin de personnaliser davantage.
$args = array(
'post_type' => 'asowp-configs',
'nopaging' => true,
);
$configs = get_posts($args);
$configs_ids = array(['' => 'None']);
foreach ($configs as $config) {
$configs_ids[$config->ID] = ['title' => $config->post_title];
}
?>
display_asowp_config_on_WC_product_config($id, $configs_ids, __('Attach this product to All Signs Options configuration', "all-signs-options-free"));
?>
settings));
}
public function get_design_buttons($with_upload = false)
{
ob_start();
$content = '';
$product = $this->product;
if ($this->variation_id) {
$item_id = $this->variation_id;
} else {
$item_id = $this->root_product_id;
}
if ($product->is_type('variable')) {
$variations = $product->get_available_variations();
foreach ($variations as $variation) {
if (!$variation['is_purchasable'] || !$variation['is_in_stock']) {
continue;
}
$asowp_product = new ASOWP_Product_Config($variation['variation_id']);
if ($asowp_product->is_asowp_customizable()) {
echo wp_kses_post($asowp_product->get_design_buttons($with_upload));
}
}
} else {
?>