javier26
Respuestas de foro creadas
-
Foro: WooCommerce
En respuesta a: obtener precio variable phpBuenas curaxo
Este es mi codigo inicial para un producto simple y me funciona lo unico que para hacerlo con un producto varible no me funciona podrias hecharme una mano
Muchas Gracias
<?php
/**
* The plugin bootstrap file
*
* This file is read by WordPress to generate the plugin information in the
* plugin admin area. This file also includes all of the dependencies used by
* the plugin, and defines a function that starts the plugin.
* @wordpress-plugin
* Plugin Name: Precio segun tamaño
* Description: Añade campos en la pagina de un producto que varia su precio segun su tamaño
* Version: 0.1.6
* Author: Alfonso Saavedra
*/defined( ‘WPINC’ ) || die;
add_action( ‘plugins_loaded’, ‘tutsplus_wc_input_start’ );
/**
* Iniciamos el plugin
*/
function tutsplus_wc_input_start() {if ( is_admin() ) {
$admin = new add_size_price_admin();
$admin->init();
} else {$plugin = new add_size_price_product_page();
$plugin->init();
}
}// Lo siguiente añade el script Javascript necesario para realizar el calculo
function calc_m2_scripts() {
wp_enqueue_script( ‘calc_precio_m2_js’, plugins_url( ‘calc_precio_m2.js’, __FILE__ ), array(), », true);
}
add_action(‘wp_enqueue_scripts’, ‘calc_m2_scripts’);class add_size_price_admin {
// Esta clase contiene las funciones que se encargan de añadir, actualizar, etc, a la hora de editar los productos
public function init() {
add_filter( ‘woocommerce_product_data_tabs’, array($this, ‘add_product_custom_size_tab’));
add_action( ‘admin_head’, array($this, ‘wcpp_custom_style’));
add_action(
‘woocommerce_product_data_panels’,
array( $this, ‘product_options_grouping’ )
);
add_action( ‘woocommerce_process_product_meta’, array($this, ‘save_product_custom_size’));
}
/** CSS To Add Custom tab Icon */
public function wcpp_custom_style() {?>
<style>#woocommerce-product-data ul.wc-tabs li.custom-size-tab_options a:before { font-family: WooCommerce; content: ‘\e601’
</style>
<?php
}// Esta funcion añade la nueva tabla de configuración en los productos
public function add_product_custom_size_tab( $product_data_tabs ){
$product_data_tabs[‘custom-size-tab’] = array(
‘label’ => ‘Tamaños del producto’,
‘target’ => ‘product_custom_size_data’,
);
return $product_data_tabs;
}public function product_options_grouping() {
// Añadimos los nuevos campos para los productos
?>
<div id=»product_custom_size_data» class=»panel woocommerce_options_panel»>
<div class=»options_group»>
<?php// Añadimos el checkbox para indicar que el precio de este producto varia segun el tamaña
woocommerce_wp_checkbox(
array( ‘id’ => ‘add_m2_price’,
‘label’ => ‘El precio de este producto varia segun tamaño’,
‘description’ => ‘Si el precio de este producto varia segun su tamaño, marque esta opción.’,
)
);// Este es el campo del ancho minimo
woocommerce_wp_text_input(
array(‘id’ => ‘ancho_min’,
‘type’=>’number’,
‘label’=>’Ancho minimo (cm)’,
‘placeholder’=>’100’,
)
);// Este es el campo del ancho máximo
woocommerce_wp_text_input(
array(‘id’ => ‘ancho_max’,
‘type’=>’number’,
‘label’=>’Ancho maximo (cm)’,
‘placeholder’=>’100’,
)
);// Este es el campo del alto minimo
woocommerce_wp_text_input(
array(‘id’ => ‘alto_min’,
‘type’=>’number’,
‘label’=>’Alto minimo (cm)’,
‘placeholder’=>’100’,
)
);// Y este es el campo del alto máximo
woocommerce_wp_text_input(
array(‘id’ => ‘alto_max’,
‘type’=>’number’,
‘label’=>’Alto max (cm)’,
‘placeholder’=>’100’,
)
);
?>
</div>
</div>
<?php
}public function save_product_custom_size($post_id) {
// Guardamos el ancho minimo
$ancho_min = $_POST[‘ancho_min’];
if (!empty($ancho_min)) {
update_post_meta($post_id, ‘ancho_min’, esc_attr($ancho_min));
}// Guardamos el ancho máximo
$ancho_max = $_POST[‘ancho_max’];
if (!empty($ancho_max)) {
update_post_meta($post_id, ‘ancho_max’, esc_attr($ancho_max));
}
// Guardamos el alto minimo
$alto_min = $_POST[‘alto_min’];
if (!empty($alto_min)) {
update_post_meta($post_id, ‘alto_min’, esc_html($alto_min));
}// Guardamos el alto máximo
$alto_max = $_POST[‘alto_max’];
if (!empty($alto_max)) {
update_post_meta($post_id, ‘alto_max’, esc_attr($alto_max));
}// Guardamos el checkbox que indica que este producto varia su precio segun tamaño
$checkbox = isset($_POST[‘add_m2_price’]) ? ‘yes’ : ‘no’;
update_post_meta($post_id, ‘add_m2_price’, $checkbox);}
}class add_size_price_product_page {
// esta clase es la que muestra los datos al usuarioprivate $if_precio_tamano;
public function __construct() {
$this->if_precio_tamano = get_post_meta( get_the_ID(), ‘add_m2_price’, true );
}public function init() {
add_action(
‘woocommerce_before_add_to_cart_button’,
array( $this, ‘product_custom_size’ )
);// Si esta marcada la opción de precio segun tamaña no mostramos el precio ni el botón de añadir al carrito entre otros
if(isset($this->if_precio_tamano)){
remove_action( ‘woocommerce_after_shop_loop_item’, ‘woocommerce_template_loop_add_to_cart’, 10 );
add_action( ‘woocommerce_after_shop_loop_item’, array($this, ‘ocultar_anadir_carrito’), 10);
add_filter( ‘woocommerce_add_cart_item_data’, array($this, ‘add_cart_item_data’), 10, 3 );
add_action( ‘woocommerce_before_calculate_totals’, array($this, ‘update_custom_price’), 10, 1 );
add_action( ‘woocommerce_after_add_to_cart_button’, array($this, ‘add_calc_size_div’), 11 );
}
add_filter( ‘woocommerce_get_item_data’, array($this, ‘mostrar_tamano_indicado’), 10, 2 );
add_action( ‘woocommerce_checkout_create_order_line_item’, array($this, ‘anadir_tamano_producto_orden’), 10, 4 );
}// Esta función oculta el precio del producto
public function ocultar_precio( $price, $product ) {
if (get_post_meta( $product->id, ‘add_m2_price’, true ) == ‘yes’){
$price = »;
return $price;
}
return $price;
}// Esta función cambia el Añadir al carrito a Ver producto
public function ocultar_anadir_carrito() {
global $product;
$link = $product->get_permalink();
echo ‘Seleccionar opciones‘;
}public function add_cart_item_data( $cart_item_data, $product_id, $variation_id ) {
// Si se marco la opción de precio por tamaño añadimos los campos pertinentes cuando se añade al carrito
if( isset($this->if_precio_tamano) && !empty($_POST[‘precio_final’])) {
$precio_final = $_POST[‘precio_final’];
$ancho = $_POST[‘ancho_cartel’];
$alto = $_POST[‘alto_cartel’];$cart_item_data[‘precio_final’] = $precio_final;
$cart_item_data[‘tamano’][‘ancho’] = $ancho;
$cart_item_data[‘tamano’][‘alto’] = $alto;
}
return $cart_item_data;
}public function update_custom_price( $cart_object ) {
// Esta función cambia el precio del producto por el que se calculo en el formulario
foreach ( $cart_object->cart_contents as $cart_item_key => $value ) {
if (get_post_meta( $value[‘product_id’], ‘add_m2_price’, true ) == ‘yes’){
$value[‘data’]->set_price($value[‘precio_final’]);
}
}
}public function mostrar_tamano_indicado( $item_data, $cart_item ) {
// Esta función muestra en el carrito el tamaño del producto que el cliente introdujo
if ( empty( $cart_item[‘tamano’] ) ) {
return $item_data;
}$item_data[] = array(
‘key’ => ‘Tamaño (cm)’,
‘value’ => wc_clean($cart_item[‘tamano’][‘ancho’]).’x’.wc_clean( $cart_item[‘tamano’][‘alto’] ),
‘display’ => »,
);return $item_data;
}public function anadir_tamano_producto_orden( $item, $cart_item_key, $values, $order ) {
// Esta función es como la anterior, solo que para cuando se ha procedido al pago
if ( empty( $values[‘tamano’] ) ) {
return;
}$item->add_meta_data(‘Tamaño del producto (cm)’, $values[‘tamano’][‘ancho’].’x’.$values[‘tamano’][‘alto’] );
}public function product_custom_size() {
// Esta función muestra en la página del producto los campos del tamaño
$teaser = get_post_meta( get_the_ID(), ‘add_m2_price’, true );
$ancho_min = get_post_meta( get_the_ID(), ‘ancho_min’, true );
$ancho_max = get_post_meta( get_the_ID(), ‘ancho_max’, true );$alto_min = get_post_meta( get_the_ID(), ‘alto_min’, true );
$alto_max = get_post_meta( get_the_ID(), ‘alto_max’, true );$precio_base = get_post_meta( get_the_ID(), ‘precio_base’, true );
if ( empty( $teaser ) || $teaser == ‘no’) {
return;
}$_product = wc_get_product(get_the_ID());
?>
<div id=»calc_precio_m2″>
<input type=»hidden» id=»precio_base» value=»<?=$_product->get_price()?>» />
<input type=»hidden» id=»precio_final» name=»precio_final» value=»<?=$_product->get_price()?>» />
<p>Introduzca el tamaño que desee en los siguientes campos</p>
<div class=»row» style=»margin-bottom: 20px;margin-top: 20px;»>
<div class=»col-md-4 col-xs-6″>
<p class=»form-row » id=»ancho_cartel_field» data-priority=»»>
<label for=»ancho_cartel» class=»»>Ancho (cm)</label>
<div class=»quantity»>
<input class=»input-text » name=»ancho_cartel» id=»ancho_cartel» value=»<?=$ancho_min?>» min=»<?=$ancho_min?>» max=»<?=$ancho_max?>» type=»number»>
</div>
</p>
</div>
<div class=»col-md-8 col-xs-6″>
<p class=»form-row » id=»alto_cartel_field» data-priority=»»>
<label for=»alto_cartel» class=»»>Alto (cm)</label>
<div class=»quantity»>
<input class=»input-text » name=»alto_cartel» id=»alto_cartel» value=»<?=$alto_min?>» min=»<?=$alto_min?>» max=»<?=$alto_max?>» type=»number»>
</div>
</p>
</div>
</div>
</div>
<?php
}public function add_calc_size_div(){
// Y esta función muestra la capa que contiene el precio calculado
if(get_post_meta( get_the_ID(), ‘add_m2_price’, true ) == ‘yes’):
?>
<div class=»woocommerce-variation-price» id=»wc_calc_size»>
<span class=»price»>
<span id=»precio_final_txt» class=»woocommerce-Price-amount amount»>0.00<span class=»woocommerce-Price-currencySymbol»>€</span>
</span>
</span>
</div>
<?php
endif;
}
}Foro: WooCommerce
En respuesta a: pasar tienda de prestashop a wordpress con woocommerceMuchas gracias Fernando me esta siendo de mucha ayuda tu informacion
los grupos seria para hacer descuentos a ciertos clientes únicamente.
Otro tema veras un amigo esta montando una tienda y en lugar de vender el disco completo quiere dar la opción de el disco completo o las canciones que el cliente desee solo comprar para descargar el producto hay alguna manera de hacerlo.
Muchas gracias.
Foro: WooCommerce
En respuesta a: pasar tienda de prestashop a wordpress con woocommerceUno de los modulos que necesitaría es el de precio por medidas o volúmenes, otro seria crear grupos de clientes para hacerles descuento sobre los productos
Foro: WooCommerce
En respuesta a: pasar tienda de prestashop a wordpress con woocommerceMuchas gracias Fernando
con los plugins me refería a que plugins de woocommerce son los mas convenientes para instalarlos en la web.