¡Únase a nosotros y descubra un mundo nuevo!

Regístrese ahora para comenzar a discutir, compartir y conectarse con otros internautas de la comunidad.

¡Esperamos contar con su participación en el foro!


REGISTRARME!

Tutorial Códigos de interés para Woocommerce

Descripción de la imagen
Colaborador
Miembro del equipo
Coordinador
Embajador
Registrado
9 Oct 2023
Mensajes
255
USDT
$ㅤ0
Hola, ¿como están todos? espero que genial. Hoy os traigo una serie de códigos que os puede servir de mucha ayuda para añadir funciones que no se pueden hacer desde el plugin Woocommerce.

Primero, debemos descargar un plugin que nos permita introducir código fácilmente en el header de nuestra web, podéis utilizar Code Snippets. O añadiéndolo en el archivo function.php de tu tema.

Dentro de Code Snippets insertamos estos códigos en el apartado PHP y le pondremos un título, además seleccionamos la pestaña de reproducirlos en todos los sitio. Y ya estarán disponibles.

Ahora os dejaré una serie de códigos para que lo tengáis como accesos rápidos por si los necesitáis.


AÑADIR UNA CASILLA DE CONFIRMACIÓN DE CONTRASEÑA EN "REGISTRO WOOCOMMERCE"

PHP:
// ----- validate password match on the registration page
function registration_errors_validation($reg_errors, $sanitized_user_login, $user_email) {
    global $woocommerce;
    extract( $_POST );
    if ( strcmp( $password, $password2 ) !== 0 ) {
        return new WP_Error( 'registration-error', __( 'Las contraseñas no coinciden.', 'woocommerce' ) );
    }
    return $reg_errors;
}
add_filter('woocommerce_registration_errors', 'registration_errors_validation', 10,3);

// ----- add a confirm password fields match on the registration page
function wc_register_form_password_repeat() {
    ?>
    <p class="form-row form-row-wide">
        <label for="reg_password2"><?php _e( 'Confirma la contraseña', 'woocommerce' ); ?> <span class="required">*</span></label>
        <input type="password" class="input-text" name="password2" id="reg_password2" value="<?php if ( ! empty( $_POST['password2'] ) ) echo esc_attr( $_POST['password2'] ); ?>" />
    </p>
    <?php
}
add_action( 'woocommerce_register_form', 'wc_register_form_password_repeat' );

// ----- Validate confirm password field match to the checkout page
function lit_woocommerce_confirm_password_validation( $posted ) {
    $checkout = WC()->checkout;
    if ( ! is_user_logged_in() && ( $checkout->must_create_account || ! empty( $posted['createaccount'] ) ) ) {
        if ( strcmp( $posted['account_password'], $posted['account_confirm_password'] ) !== 0 ) {
            wc_add_notice( __( 'Lascontraseñas no coinciden.', 'woocommerce' ), 'error' );
        }
    }
}
add_action( 'woocommerce_after_checkout_validation', 'lit_woocommerce_confirm_password_validation', 10, 2 );

// ----- Add a confirm password field to the checkout page
function lit_woocommerce_confirm_password_checkout( $checkout ) {
    if ( get_option( 'woocommerce_registration_generate_password' ) == 'no' ) {

        $fields = $checkout->get_checkout_fields();

        $fields['account']['account_confirm_password'] = array(
            'type'              => 'password',
            'label'             => __( 'Confirmar contraseña', 'woocommerce' ),
            'required'          => true,
            'placeholder'       => _x( 'Confirmar contraseña', 'placeholder', 'woocommerce' )
        );

        $checkout->__set( 'checkout_fields', $fields );
    }
}
add_action( 'woocommerce_checkout_init', 'lit_woocommerce_confirm_password_checkout', 10, 1 );



CAMBIAR CSS DEL EMAIL DE WOOCOMMERCE (CAMBIAR EL EMAIL POR DEFECTO)
PHP:
add_filter( 'woocommerce_email_styles', 'bbloomer_add_css_to_emails', 9999, 2 );
 
function bbloomer_add_css_to_emails( $css, $email ) {
  $css .= '
  #template_container {
  background-color: #fff;
  box-shadow: 5px 10px 20px #dedede !important;
  border: none; }
  #template_header_image {
  width: 200px;
  margin-bottom: 16px; }
  ';
  return $css;
}



HISTORIAL DE COMPRAR DEL CLIENTE
PHP:
add_action( 'edit_user_profile', function( $profileuser ) {
    if( ! current_user_can( 'administrator' ) ) { return; }
    $orderhistory = get_posts( [
        'numberposts' => -1,
        'meta_key' => '_customer_user',
        'meta_value' => $profileuser->ID,
        'post_type' => wc_get_order_types(),
        'post_status' => array_keys( wc_get_order_statuses() ),
    ] );
    ?>
    <table class="form-table">
        <tr>
            <th>Historial de pedidos</th>
            <td>
                <?php
                foreach( $orderhistory as $post ) {
                    $order = wc_get_order( $post->ID );
                    echo sprintf(
                        '<div>Order <a href="post.php?post=%d&action=edit">%s</a> (%s)</div>',
                        $post->ID, $order->get_order_number(), $order->get_status()
                    );
                }
                ?>
            </td>
        </tr>
    </table>
    <?php
} );



METATAG PARA FORMULARIOS DISPOSITIVOS MÓVILES (QUE LA PANTALLA NO AUMENTE CUANDO SELECCIONAMOS UN FORMULARIO EN MÓVIL)

¡Este lo introduciremos como HTML! Aunque sea HTML lo pongo por aquí 👌👌.

HTML:
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=0"/>

¡¡ESPERO QUE LES SIRVA!!
 
Última edición:
Explorador Activo
Registrado
29 Dic 2023
Mensajes
23
USDT
$ㅤ0
Hola, ¿como están todos? espero que genial. Hoy os traigo una serie de códigos que os puede servir de mucha ayuda para añadir funciones que no se pueden hacer desde el plugin Woocommerce.

Primero, debemos descargar un plugin que nos permita introducir código fácilmente en el header de nuestra web, podéis utilizar Code Snippets. O añadiéndolo en el archivo function.php de tu tema.

Dentro de Code Snippets insertamos estos códigos en el apartado PHP y le pondremos un título, además seleccionamos la pestaña de reproducirlos en todos los sitio. Y ya estarán disponibles.

Ahora os dejaré una serie de códigos para que lo tengáis como accesos rápidos por si los necesitáis.


AÑADIR UNA CASILLA DE CONFIRMACIÓN DE CONTRASEÑA EN "REGISTRO WOOCOMMERCE"

PHP:
// ----- validate password match on the registration page
function registration_errors_validation($reg_errors, $sanitized_user_login, $user_email) {
    global $woocommerce;
    extract( $_POST );
    if ( strcmp( $password, $password2 ) !== 0 ) {
        return new WP_Error( 'registration-error', __( 'Las contraseñas no coinciden.', 'woocommerce' ) );
    }
    return $reg_errors;
}
add_filter('woocommerce_registration_errors', 'registration_errors_validation', 10,3);

// ----- add a confirm password fields match on the registration page
function wc_register_form_password_repeat() {
    ?>
    <p class="form-row form-row-wide">
        <label for="reg_password2"><?php _e( 'Confirma la contraseña', 'woocommerce' ); ?> <span class="required">*</span></label>
        <input type="password" class="input-text" name="password2" id="reg_password2" value="<?php if ( ! empty( $_POST['password2'] ) ) echo esc_attr( $_POST['password2'] ); ?>" />
    </p>
    <?php
}
add_action( 'woocommerce_register_form', 'wc_register_form_password_repeat' );

// ----- Validate confirm password field match to the checkout page
function lit_woocommerce_confirm_password_validation( $posted ) {
    $checkout = WC()->checkout;
    if ( ! is_user_logged_in() && ( $checkout->must_create_account || ! empty( $posted['createaccount'] ) ) ) {
        if ( strcmp( $posted['account_password'], $posted['account_confirm_password'] ) !== 0 ) {
            wc_add_notice( __( 'Lascontraseñas no coinciden.', 'woocommerce' ), 'error' );
        }
    }
}
add_action( 'woocommerce_after_checkout_validation', 'lit_woocommerce_confirm_password_validation', 10, 2 );

// ----- Add a confirm password field to the checkout page
function lit_woocommerce_confirm_password_checkout( $checkout ) {
    if ( get_option( 'woocommerce_registration_generate_password' ) == 'no' ) {

        $fields = $checkout->get_checkout_fields();

        $fields['account']['account_confirm_password'] = array(
            'type'              => 'password',
            'label'             => __( 'Confirmar contraseña', 'woocommerce' ),
            'required'          => true,
            'placeholder'       => _x( 'Confirmar contraseña', 'placeholder', 'woocommerce' )
        );

        $checkout->__set( 'checkout_fields', $fields );
    }
}
add_action( 'woocommerce_checkout_init', 'lit_woocommerce_confirm_password_checkout', 10, 1 );



CAMBIAR CSS DEL EMAIL DE WOOCOMMERCE (CAMBIAR EL EMAIL POR DEFECTO)
PHP:
add_filter( 'woocommerce_email_styles', 'bbloomer_add_css_to_emails', 9999, 2 );
 
function bbloomer_add_css_to_emails( $css, $email ) {
  $css .= '
  #template_container {
  background-color: #fff;
  box-shadow: 5px 10px 20px #dedede !important;
  border: none; }
  #template_header_image {
  width: 200px;
  margin-bottom: 16px; }
  ';
  return $css;
}



HISTORIAL DE COMPRAR DEL CLIENTE
PHP:
add_action( 'edit_user_profile', function( $profileuser ) {
    if( ! current_user_can( 'administrator' ) ) { return; }
    $orderhistory = get_posts( [
        'numberposts' => -1,
        'meta_key' => '_customer_user',
        'meta_value' => $profileuser->ID,
        'post_type' => wc_get_order_types(),
        'post_status' => array_keys( wc_get_order_statuses() ),
    ] );
    ?>
    <table class="form-table">
        <tr>
            <th>Historial de pedidos</th>
            <td>
                <?php
                foreach( $orderhistory as $post ) {
                    $order = wc_get_order( $post->ID );
                    echo sprintf(
                        '<div>Order <a href="post.php?post=%d&action=edit">%s</a> (%s)</div>',
                        $post->ID, $order->get_order_number(), $order->get_status()
                    );
                }
                ?>
            </td>
        </tr>
    </table>
    <?php
} );



METATAG PARA FORMULARIOS DISPOSITIVOS MÓVILES (QUE LA PANTALLA NO AUMENTE CUANDO SELECCIONAMOS UN FORMULARIO EN MÓVIL)

¡Este lo introduciremos como HTML! Aunque sea HTML lo pongo por aquí 👌👌.

HTML:
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=0"/>

¡¡ESPERO QUE LES SIRVA!!
Se te agradece, buscaba el de confirmar contraseña, excelente.
 
Colaborador
Miembro del equipo
Coordinador
Embajador
Registrado
9 Oct 2023
Mensajes
255
USDT
$ㅤ0
Muchas gracias @Cristina_24 , siempre es un placer ayudarles en todo laque sea posible! Cualquier cosa que puedas aportar al foro adelante! Además dude contar con nuestra ayuda siempre que lo necesites claro! Un abrazo!
 
Explorador Activo
Registrado
9 Oct 2023
Mensajes
30
USDT
$ㅤ0
Hola ando peliando con el tema Bridge por que requiero aparte de tener el boton Añadir al carrito Comprar ahora estuve investigando y me encontre este codigo
/* buy now button woocommerce code by WPcookie
* update: https://redpishi.com/wordpress-tutorials/buy-now-button-woocommerce/
*/
add_action( 'wp_footer', function(){ if(!is_admin()) {

// Change button color from here
$color = "";

?>
<style>
a.custom-checkout-btn {
margin: 0px 5px!important;
}
</style>
<?php
if ( $color != "" ){
?>
<style>
a.custom-checkout-btn {
background: <?php echo $color; ?>!important;
transition: 0.4s filter ease;
}
a.custom-checkout-btn:hover {
filter: saturate(2);
}
</style>
<?php }}});

add_action( 'woocommerce_after_add_to_cart_button', 'add_custom_addtocart_and_checkout' );
function add_custom_addtocart_and_checkout() {
global $product;

// conditional tags
$condition = $product->is_type( 'simple' ) || $product->is_type( 'variable' );

$addtocart_url = wc_get_checkout_url().'?add-to-cart='.$product->get_id();
$button_class = 'single_add_to_cart_button button alt custom-checkout-btn';

// Change the text of the buy now button from here
$button_text = __("Buy now", "woocommerce");

if( $product->is_type( 'simple' ) ) :
?>
<script>
jQuery(function($) {
var url = '<?php echo $addtocart_url; ?>',
qty = 'input.qty',
button = 'a.custom-checkout-btn';

// On input/change quantity event
$(qty).on('input change', function() {
$(button).attr('href', url + '&quantity=' + $(this).val() );
});
});
</script>
<?php
elseif( $product->is_type( 'variable' ) ) :
$addtocart_url = wc_get_checkout_url().'?add-to-cart=';
?>
<script>
jQuery(function($) {
var url = '<?php echo $addtocart_url; ?>',
vid = 'input[name="variation_id"]',
pid = 'input[name="product_id"]',
qty = 'input.qty',
button = 'a.custom-checkout-btn';
setTimeout( function(){
if( $(vid).val() != '' ){
$(button).attr('href', url + $(vid).val() + '&quantity=' + $(qty).val() );
}
}, 300 );
$(qty).on('input change', function() {
if( $(vid).val() != '' ){
$(button).attr('href', url + $(vid).val() + '&quantity=' + $(this).val() );
}
});
$('.variations_form').on('change blur', 'table.variations select', function() {
if( $(vid).val() != '' ){
$(button).attr('href', url + $(vid).val() + '&quantity=' + $(qty).val() );
}
});
});
</script>
<?php
endif;
if ($condition) {
echo '<a href="'.$addtocart_url.'" class="'.$button_class.'">'.$button_text.'</a>';
}
}

Al anexarlo me esta pasando que me muestra dos botones 1711747363121.png

Alguien que me pueda ayduar a solucionar
 
Colaborador
Miembro del equipo
Coordinador
Embajador
Registrado
9 Oct 2023
Mensajes
255
USDT
$ㅤ0
Gracias por añadir este código! Vamos a añadir bastantes más ya que veo que ha gustado!!
 
Navegante
Registrado
9 Oct 2023
Mensajes
98
USDT
$ㅤ0
Hola ando peliando con el tema Bridge por que requiero aparte de tener el boton Añadir al carrito Comprar ahora estuve investigando y me encontre este codigo
/* buy now button woocommerce code by WPcookie
* update: https://redpishi.com/wordpress-tutorials/buy-now-button-woocommerce/
*/
add_action( 'wp_footer', function(){ if(!is_admin()) {

// Change button color from here
$color = "";

?>
<style>
a.custom-checkout-btn {
margin: 0px 5px!important;
}
</style>
<?php
if ( $color != "" ){
?>
<style>
a.custom-checkout-btn {
background: <?php echo $color; ?>!important;
transition: 0.4s filter ease;
}
a.custom-checkout-btn:hover {
filter: saturate(2);
}
</style>
<?php }}});

add_action( 'woocommerce_after_add_to_cart_button', 'add_custom_addtocart_and_checkout' );
function add_custom_addtocart_and_checkout() {
global $product;

// conditional tags
$condition = $product->is_type( 'simple' ) || $product->is_type( 'variable' );

$addtocart_url = wc_get_checkout_url().'?add-to-cart='.$product->get_id();
$button_class = 'single_add_to_cart_button button alt custom-checkout-btn';

// Change the text of the buy now button from here
$button_text = __("Buy now", "woocommerce");

if( $product->is_type( 'simple' ) ) :
?>
<script>
jQuery(function($) {
var url = '<?php echo $addtocart_url; ?>',
qty = 'input.qty',
button = 'a.custom-checkout-btn';

// On input/change quantity event
$(qty).on('input change', function() {
$(button).attr('href', url + '&quantity=' + $(this).val() );
});
});
</script>
<?php
elseif( $product->is_type( 'variable' ) ) :
$addtocart_url = wc_get_checkout_url().'?add-to-cart=';
?>
<script>
jQuery(function($) {
var url = '<?php echo $addtocart_url; ?>',
vid = 'input[name="variation_id"]',
pid = 'input[name="product_id"]',
qty = 'input.qty',
button = 'a.custom-checkout-btn';
setTimeout( function(){
if( $(vid).val() != '' ){
$(button).attr('href', url + $(vid).val() + '&quantity=' + $(qty).val() );
}
}, 300 );
$(qty).on('input change', function() {
if( $(vid).val() != '' ){
$(button).attr('href', url + $(vid).val() + '&quantity=' + $(this).val() );
}
});
$('.variations_form').on('change blur', 'table.variations select', function() {
if( $(vid).val() != '' ){
$(button).attr('href', url + $(vid).val() + '&quantity=' + $(qty).val() );
}
});
});
</script>
<?php
endif;
if ($condition) {
echo '<a href="'.$addtocart_url.'" class="'.$button_class.'">'.$button_text.'</a>';
}
}

Al anexarlo me esta pasando que me muestra dos botones Ver archivo adjunto 535

Alguien que me pueda ayduar a solucionar

Puede ser algún otro plugin que agregaste que te tiene con dos o hasta 3 botones veo yo ahi...
Crea porfa un tema aparte para no distorsionar este tema principal....
También si puedes dejar el sitio web para revisarlo sería bueno...
Salu2!
 
Colaborador
Miembro del equipo
Coordinador
Embajador
Registrado
9 Oct 2023
Mensajes
255
USDT
$ㅤ0
Gracias a vosotros intentaré añadir muchos más para que las ecommerce sean más funcionales y personalizables!
 
Arriba