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 );
});
}
});