entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

1voto

Productos woocommerce vistos recientemente para base de datos

Hola a la comunidad Estoy practicando en un proyecto de wordpress woocommerce e inserté una función php para mostrar productos vistos recientemente a través de un shortcode usando cookies. Funciona bien localmente, ahora lo que quiero hacer es vincular esta cookie o valores a un usuario. En otras palabras, cuando inicio sesión, me mostrará los productos que vi anteriormente en mi computadora portátil, teléfono celular u otro dispositivo (¿debería guardarse en una base de datos?). El código es el siguiente:

  function rc_woocommerce_recently_viewed_products( $atts, $content = null ) {
    extract(shortcode_atts(array("per_page" => '4'), $atts));
    global $woocommerce;
    $viewed_products = ! empty( $_COOKIE['woocommerce_recently_viewed'] ) ? (array) explode( '|', $_COOKIE['woocommerce_recently_viewed'] ) : array();
    $viewed_products = array_filter( array_map( 'absint', $viewed_products ) );
    if ( empty( $viewed_products ) )
        return __( '', 'rc_wc_rvp' );
    ob_start();
    if( !isset( $per_page ) ? $number = 4 : $number = $per_page )
        $query_args = array(
            'posts_per_page' => -1, 
            'no_found_rows'  => 1, 
            'post_status'    => 'publish', 
            'post_type'      => 'product', 
            'post__in'       => $viewed_products, 
            'orderby'        => 'post__in'
        );
    $query_args['meta_query'] = array();
    $query_args['meta_query'][] = $woocommerce->query->stock_status_meta_query();
    $r = new WP_Query($query_args);
    if ( $r->have_posts() ) {       
                            // Start the loop                           
                            while ( $r->have_posts()) {
                                $r->the_post();                             
                                $content .= wc_get_template_part( 'content', 'product' );           

                            }
                    }
    $content .= ob_get_clean();
    return $content;
    }

    add_shortcode("woocommerce_recently_viewed_products","rc_woocommerce_recently_viewed_products");

y la funcion para habilitar la cookie en el recorrido de mis visitas a los productos

    function wc_track_product_view_always() {
    if ( ! is_singular( 'product' ) /* hello: remove this condition to run: || ! is_active_widget( false, false, 'woocommerce_recently_viewed_products', true )*/ ) {
        return;
    }

    global $post;

    if ( empty( $_COOKIE['woocommerce_recently_viewed'] ) ) {
        $viewed_products = array();
    } else {
        $viewed_products = wp_parse_id_list( (array) explode( '|', wp_unslash( $_COOKIE['woocommerce_recently_viewed'] ) ) ); 
    }

    $keys = array_flip( $viewed_products );

    if ( isset( $keys[ $post->ID ] ) ) {
        unset( $viewed_products[ $keys[ $post->ID ] ] );
    }

    $viewed_products[] = $post->ID;

    if ( count( $viewed_products ) > 15 ) {
        array_shift( $viewed_products );
    }
    wc_setcookie( 'woocommerce_recently_viewed', implode( '|', $viewed_products ) );
    }

    remove_action('template_redirect', 'wc_track_product_view', 20);
    add_action( 'template_redirect', 'wc_track_product_view_always', 20 );

Repito que localmente funciona perfectamente. Ahora quiero adaptarlo por usuario (independientemente del dispositivo de navegación), lo que lo guardaría en la base de datos de WordPress. Pero no sé cómo hacer esta adaptación. Si pudieras ayudarme por favor.

0voto

Peter comentado

Por favor edita tu pregunta y déjala en español.

0voto

Luiss comentado

Traducido a español, @Peter . Espero me puedas ayudar. Gracias

Por favor, accede o regístrate para responder a esta pregunta.

Otras Preguntas y Respuestas


...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta