WordPress: creare una wish list in WooCommerce

WordPress: creare una wish list in WooCommerce

Creare una wish list in WooCommerce non è un'operazione eccessivamente complessa.

Definiamo un'action AJAX solo per gli utenti loggati che accetta come parametri l'ID dell'utente corrente e del prodotto scelto:


function my_add_to_favs() {
	
	$user_id = (int) $_POST['user_id'];
	$product_id = (int) $_POST['product_id'];
	$favs = get_user_meta( $user_id, 'favs', true );
	
	if( $favs == '' ) {
		$data = array();
		$data[] = $product_id;
		
		update_user_meta( $user_id, 'favs', json_encode( $data ) );
		
	} else {
		$data = json_decode( $favs, true );
		$data[] = $product_id;
		update_user_meta( $user_id, 'favs', json_encode( $data ) );
	}
	
	$output = array(
		'url' => get_permalink( $product_id ),
		'title' => get_the_title( $product_id )
	);
	
	header( 'Content-Type: application/json' );
	echo json_encode( $output );
	exit();
	
}

add_action( 'wp_ajax_my_add_to_favs', 'my_add_to_favs' );

Aggiungiamo l'ID dell'utente e del prodotto come attributi di dati nel Loop di WooCommerce:


<?php
$data = '';
if( is_user_logged_in() ) {
	$user = wp_get_current_user();
	$user_id = $user->ID;
	$data = ' data-user="' . $user_id . '" data-product="' . get_the_ID() . '"';
}
?>
<li class="product"<?php echo $data; ?>>...</li>

Mostriamo quindi la wish list:


<?php
		if( is_user_logged_in() ) {
	?>
		<ul id="favs">
		  <?php
			$user = wp_get_current_user();
			$user_id = $user->ID;
			$favs = get_user_meta( $user_id, 'favs', true );
			if( $favs !== '' ) {
				$favs_data = json_decode( $favs );
				foreach( $favs_data as $fav ) {
			?>
				<li><a href="<?php echo get_permalink( $fav ); ?>"><?php echo get_the_title( $fav ); ?></a></li>
			<?php
				}
			} else {
			?>
				<li id="no-favs"><?php _e( 'You currently have no favorites', 'miotema' ); ?></li>
			<?php
			}
		?>
		</ul>
	<?php
		}
	?>

Infine creiamo il codice jQuery:


$( ".add-to-favs" ).on( "click", function( e ) {
	
	e.preventDefault();
	
	var $a = $( this );
	var $product = $a.parents( ".product" );
	
	if( $product.data( "user" ) ) {
		var userID = $product.data( "user" );
		var productID = $product.data( "product" );
		var url = "http://" + location.host + "/wp-admin/admin-ajax.php";
		var data = {
			action: "my_add_to_favs",
			user_id: userID,
			product_id: productID
		};
		var $favs = $( "#favs" );
		
		$.post( url, data, function( response ) {
			var html = '<li><a href="' + response.url + '">' + response.title + '</a></li>';
			if( $( "#no-favs", $favs ).length ) {
				$( "#no-favs", $favs ).remove();	
			}
			$favs.append( html );
		});
	}
	
	
});

Torna su