jueves, 10 de agosto de 2017

lunes, 17 de julio de 2017

JQuery mostrar imagen 1 o 2 según si tiene precio o el texto consultar

Este es el script que he hecho para que según contexto ponga una imagen u otra:

var nodoprecio = document.getElementsByClassName("price");
nodoprecio = nodoprecio[0].textContent;
nodoprecio = nodoprecio.trim();
var consultar = 'Consultar';
if (nodoprecio === consultar){
    $(".price").after("<div id='imgportes'><img src='http://www.mundobodega.com/content/972068/consultar_mundobodega.png' /></div>");
}
else{
    $(".price").after("<div id='imgportes2'><img src='http://www.mundobodega.com/content/972068/envio_mundobodega_2.png' /></div>");
}

la primera versión me daba problemas en FireFox porque en vez de textContent que es el que marca el estándar a usar usaba outerText que es propietario de MS.

Bien está lo que bien acaba.

miércoles, 12 de julio de 2017

Añadir al carro y seleccionar variacion del producto desde la pagina de catalogo

Con este trozo de código pegado en el functions.php del tema que este vigente conseguiremos que en la catalog shop page (pagina que muestra los productos nos salga el añadir al carrito y escoger las variaciones si el producto dispone de ellas claro está.
 El código es de Remi Corson, grande!
http://www.remicorson.com/display-woocommerce-product-variations-dropdown-on-the-shop-page/

// Display variations dropdowns on shop page for variable products
 add_filter( 'woocommerce_loop_add_to_cart_link', 'woo_display_variation_dropdown_on_shop_page' );

 function woo_display_variation_dropdown_on_shop_page() {
   
     global $product;
    if( $product->is_type( 'variable' )) {
   
    $attribute_keys = array_keys( $product->get_attributes() );
    ?>
   
    <form class="variations_form cart" method="post" enctype='multipart/form-data' data-product_id="<?php echo absint( $product->id ); ?>" data-product_variations="<?php echo htmlspecialchars( json_encode( $product->get_available_variations() ) ) ?>">
        <?php do_action( 'woocommerce_before_variations_form' ); ?>
   
        <?php if ( empty( $product->get_available_variations() ) && false !== $product->get_available_variations() ) : ?>
            <p class="stock out-of-stock"><?php _e( 'This product is currently out of stock and unavailable.', 'woocommerce' ); ?></p>
        <?php else : ?>
            <table class="variations" cellspacing="0">
                <tbody>
                    <?php foreach ( $product->get_attributes() as $attribute_name => $options ) : ?>
                        <tr>
                            <td class="label"><label for="<?php echo sanitize_title( $attribute_name ); ?>"><?php echo wc_attribute_label( $attribute_name ); ?></label></td>
                            <td class="value">
                                <?php
                                    $selected = isset( $_REQUEST[ 'attribute_' . sanitize_title( $attribute_name ) ] ) ? wc_clean( urldecode( $_REQUEST[ 'attribute_' . sanitize_title( $attribute_name ) ] ) ) : $product->get_variation_default_attribute( $attribute_name );
                                    wc_dropdown_variation_attribute_options( array( 'options' => $options, 'attribute' => $attribute_name, 'product' => $product, 'selected' => $selected ) );
                                    echo end( $attribute_keys ) === $attribute_name ? apply_filters( 'woocommerce_reset_variations_link', '<a class="reset_variations" href="#">' . __( 'Clear', 'woocommerce' ) . '</a>' ) : '';
                                ?>
                            </td>
                        </tr>
                    <?php endforeach;?>
                </tbody>
            </table>
   
            <?php do_action( 'woocommerce_before_add_to_cart_button' ); ?>
   
            <div class="single_variation_wrap">
                <?php
                    /**
                     * woocommerce_before_single_variation Hook.
                     */
                    do_action( 'woocommerce_before_single_variation' );
   
                    /**
                     * woocommerce_single_variation hook. Used to output the cart button and placeholder for variation data.
                     * @since 2.4.0
                     * @hooked woocommerce_single_variation - 10 Empty div for variation data.
                     * @hooked woocommerce_single_variation_add_to_cart_button - 20 Qty and cart button.
                     */
                    do_action( 'woocommerce_single_variation' );
   
                    /**
                     * woocommerce_after_single_variation Hook.
                     */
                    do_action( 'woocommerce_after_single_variation' );
                ?>
            </div>
   
            <?php do_action( 'woocommerce_after_add_to_cart_button' ); ?>
        <?php endif; ?>
   
        <?php do_action( 'woocommerce_after_variations_form' ); ?>
    </form>
       
    <?php } else {
       
    echo sprintf( '<a rel="nofollow" href="%s" data-quantity="%s" data-product_id="%s" data-product_sku="%s" class="%s">%s</a>',
            esc_url( $product->add_to_cart_url() ),
            esc_attr( isset( $quantity ) ? $quantity : 1 ),
            esc_attr( $product->id ),
            esc_attr( $product->get_sku() ),
            esc_attr( isset( $class ) ? $class : 'button' ),
            esc_html( $product->add_to_cart_text() )
        );
   
    }
   
}

miércoles, 28 de septiembre de 2016

Problemas borrando productos (variaciones siguen en BD pero no aparecen en la interfaz)

Este es un problema que se ve que es bastante común en WOO COMMERCE. De hecho encontré mucha gente que hablaban de este problema y muchas soluciones, desde peticiones MySQL para actualizar la base de datos borrando variaciones, etc...

Yo propongo una que le gustara a la mayoría de gente por su sencillez, sin arriesgarse a peticiones " a mano" a la base de datos ( aunque siempre se recomienda copia de seguridad, porque al fin y al cabo aunque sea por interfaz web el resultado es el mismo: una petición a la base de datos que comprobará que variaciones estan "huerfanas" (padre borrado) y las borrará, que es lo que pretendemos.

Seccion Wocommerce > Estado de sistema

En esta página arriba hay varios tabuladores, como se muestra en la captura:



escogemos el de herramientas, y allí buscamos la opción:

Delete Orphans (borrar huérfanos)


viernes, 2 de septiembre de 2016

Botón leer más con Jquery

Aquí pego un fragmento de un botón de leer más que hemos hecho:
Explicar que el texto viene oculto desde el div con  id  #panel.


<strong>Prodimex Global</strong> es una empresa zapatera ubicada en Logroño (España). Ha desarrollado la marca <strong>ORIOCX</strong>, dedicada a la fabricación de <em><b><u>calzado montaña</u></b></em> para actividades al aire libre.

Los productos que presenta <strong>ORIOCX</strong> son el fruto de una larga experiencia en la fabricación de <strong><i><u>calzado</u></i></strong> de calidad que se remonta a 1948.

<strong>ORIOCX</strong> fabrica un <strong><i><u>calzado montaña</u></i></strong> cómodo y práctico para disfrutar al máximo de la actividad junto a la naturaleza.

Este <strong><i><u>zapato montaña</u></i></strong> está pensado para practicar trekking, travesía, trail running, backpacking, caza o para uso cotidiano.

Podemos encontrar <strong><i><u>botas</u></i></strong>, <strong><i><u>zapatos</u></i></strong>, <strong><i><u>deportivos</u></i></strong> y <strong><i><u>sandalias</u></i></strong>.

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
<script>
$(document).ready(function(){
 $("#panel p").hide()
    $("button").click(function(){
        $("#panel p").slideToggle(1000, function(){
        });
    });
});
</script>

<style>
#panel, #flip {
    text-align: center;
padding: 5px;
}

#panel {
    padding: 50px;
    display: none;
}
</style>
<button>Leer más</button>
<div id="panel">
<p><strong>ORIOCX</strong> trabaja en investigar y diseñar un <em><b><u>calzado montaña</u></b></em> tecnológicamente avanzado con materiales de primera calidad.

<strong>X-System,</strong> es un sistema de protección y sujeción en la zona del maléolo que permite realizar travesías por todo tipo de terrenos, aportando a los<span class="apple-converted-space"> </span><strong><i><u>zapatos montaña</u></i></strong><span class="apple-converted-space"> </span>una sujeción extra.

<strong>ULTRA LIGHT System, </strong>el uso de innovadores materiales ligeros permite crear unos <em><b><u>zapatos</u></b></em><em><u> </u></em><strong><i><u>montaña</u></i></strong> con los que se puede andar más cómodo y ligero.

<strong>Ocx2-Dry, </strong>gracias a componentes probados y controlados, y a un concepto de ensamble específico, estos <em><b><u>zapatos montaña</u></b></em> son impermeables y transpirables. La membrana Ocx2-Dry asegura una impermeabilidad duradera al <strong><i><u>calzado montaña</u></i></strong>, permitiendo la evacuación de la humedad. El cuero es naturalmente transpirable y tratado hidrófobo. Membrana OCX2DRY formada por 70% poliéster y 30% poliéter.

Forro <em><b>SYMPATEX,</b></em> se trata de una membrana ecológica de cinco micras de espesor laminada sobre base textil, que protege contra la humedad. Sus componentes hidrofílicos atraen el agua y absorben la humedad (transpiración), expulsándola desde el interior hacia el exterior, asegurando al <em><b><u>calzado montaña</u></b></em> un control óptimo del clima interno al tiempo que repele el agua.</p>
</div>

miércoles, 31 de agosto de 2016

Mostrar precio variación seleccionada

Este otro lo encontré en Stack Overflow, cuantas veces nos has salvavo el culo oh estimada Stack Overflow? demasiadas, y espero que siga siendo así por mucho más tiempo. La mejor página para pedir socorro cuando las cosas no salen como queremos....

El precio lo muestra en el desplegable de las variaciones, mostrando el precio de cada una de ellas.

// Mostrar precio de la variacion escogida en el desplegable de variaciones

add_filter( 'woocommerce_variation_option_name', 'display_price_in_variation_option_name' );

function display_price_in_variation_option_name( $term ) {
    global $wpdb, $product;

    if ( empty( $term ) ) return $term;
    if ( empty( $product->id ) ) return $term;

    $result = $wpdb->get_col( "SELECT slug FROM {$wpdb->prefix}terms WHERE name = '$term'" );

    $term_slug = ( !empty( $result ) ) ? $result[0] : $term;

    $query = "SELECT postmeta.post_id AS product_id
                FROM {$wpdb->prefix}postmeta AS postmeta
                    LEFT JOIN {$wpdb->prefix}posts AS products ON ( products.ID = postmeta.post_id )
                WHERE postmeta.meta_key LIKE 'attribute_%'
                    AND postmeta.meta_value = '$term_slug'
                    AND products.post_parent = $product->id";

    $variation_id = $wpdb->get_col( $query );

    $parent = wp_get_post_parent_id( $variation_id[0] );

    if ( $parent > 0 ) {
         $_product = new WC_Product_Variation( $variation_id[0] );
         return $term . ' (' . wp_kses( woocommerce_price( $_product->get_price() ), array() ) . ')';
    }
    return $term;

}


Código para mostrar Desde X (menor precio de todas las variaciones de ese producto)

 
En woodemia he encontrado este código que te permite que en vez de mostrar el rango de precios
salga Desde x, el autor original de este código es el magnífico gerhardpotgieter: 
 
/**
 * Use WC 2.0 variable price format, now include sale price strikeout
 *
 * @param  string $price
 * @param  object $product
 * @return string
 */
function wc_wc20_variation_price_format( $price, $product ) {
    // Main Price
    $prices = array( $product->get_variation_price( 'min', true ), $product->get_variation_price( 'max', true ) );
    $price = $prices[0] !== $prices[1] ? sprintf( __( 'From: %1$s', 'woocommerce' ), wc_price( $prices[0] ) ) : wc_price( $prices[0] );

    // Sale Price
    $prices = array( $product->get_variation_regular_price( 'min', true ), $product->get_variation_regular_price( 'max', true ) );
    sort( $prices );
    $saleprice = $prices[0] !== $prices[1] ? sprintf( __( 'From: %1$s', 'woocommerce' ), wc_price( $prices[0] ) ) : wc_price( $prices[0] );

    if ( $price !== $saleprice ) {
        $price = '<del>' . $saleprice . '</del> <ins>' . $price . '</ins>';
    }
    
    return $price;
}
add_filter( 'woocommerce_variable_sale_price_html', 'wc_wc20_variation_price_format', 10, 2 );
add_filter( 'woocommerce_variable_price_html', 'wc_wc20_variation_price_format', 10, 2 );