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.