Skip to content
Advertisement

Error when removing a produсt from favorites (I created the wishlist system myself)

guys! I faced some issue again. For a project on WooCommerce I created the custom system favorite products. The default one did not suit us.I could implement the addition created this code:

Button for adding to the favorite list

<span data-post-id="<?php the_ID(); ?>" data-user-id="<?php echo $current_user->ID; ?>" class="product__favorite product_favor"></span>

The jQuery code

  jQuery('.product_favor').on('click',function(e){
    var postID = jQuery(this).attr("data-post-id");
    var userID = jQuery(this).attr("data-user-id");

    data = {
            'action': 'dicaprio_add_fav_product',
            'postID': postID,
            'userID': userID
        }
        jQuery.ajax({
            type:'post',
            url: object_url.url,
            data: data,
            cache: false,
            success: function(data) {
                
            }
        });
    e.preventDefault();
});

The code in function:

add_action( 'wp_ajax_nopriv_dicaprio_add_fav_product', 'dicaprio_add_fav_product' );
add_action( 'wp_ajax_dicaprio_add_fav_product', 'dicaprio_add_fav_product' );

function dicaprio_add_fav_product() {

   $postID = $_POST['postID'];
   $userID = $_POST['userID'];

$current_fav_list = get_user_meta( $userID, 'favorite_list_product', true );

if ( is_array( $current_fav_list ) ) {
    if ( in_array( $postID, $current_fav_list ) ) {

    } else {
        $current_fav_list[] = $postID;
    }
 } else {
    $current_fav_list   = array();
    $current_fav_list[] = $postID;
 }
    update_usermeta( $userID, 'favorite_list_product', $current_fav_list );

}

But I have not thought about the removal system. No, I thought that I could do everything the other way around. But it doesn’t work. This is how I decided to organize the removal of an item from favorites.

Delete button

<?php if(is_page_template('page-favorite.php') ): ?>
<div style="display: none" class="remove_product" data-post-id="<?php the_ID(); ?>" data-user-id="<?php echo $current_user->ID; ?>"  class="remove_from_favorite">Remove</div>
<?php endif; ?>

The jQuery code for remove

 jQuery('.remove_product').on('click',function(e){

    var postID = jQuery(this).attr("data-post-id");
    var userID = jQuery(this).attr("data-user-id");
    alert(postID)
    data = {
            'action': 'dicaprio_remove_fav_prod',
            'postID': postID,
            'userID': userID
        }
        jQuery.ajax({
            type:'post',
            url: object_url.url,
            data: data,
            cache: false,
            success: function(data) {
            }
        });
    e.preventDefault();
 });

And the function code to remove

add_action( 'wp_ajax_nopriv_dicaprio_add_fav_prod', 'dicaprio_remove_fav_prod' );
add_action( 'wp_ajax_dicaprio_add_fav_prod', 'dicaprio_remove_fav_prod' );

function dicaprio_remove_fav_prod() {

$postID = $_POST['postID'];
$userID = $_POST['userID'];

$current_fav_list = get_user_meta( $userID, 'favorite_list_product', true );

if ( is_array( $current_fav_list ) ) {
    if ( in_array( $postID, $current_fav_list ) ) {

    } else {
        $current_fav_list[] = $postID;
    }
} else {
    $current_fav_list   = array();
    $current_fav_list[] = $postID;
}

update_usermeta( $userID, 'favorite_list_product', $current_fav_list );

}

But deleting doesn’t work. When I click on the delete button, Ajax return 400 error. Here is screenshot:

enter image description here

I tried but couldn’t figure out what was going on. And I suspect that the removal code has errors, but I just don’t see them. Please help me solve this issue.

Advertisement

Answer

Change your code for remove from favorites:

add_action( 'wp_ajax_nopriv_dicaprio_add_fav_prod', 'dicaprio_remove_fav_prod' );
add_action( 'wp_ajax_dicaprio_add_fav_prod', 'dicaprio_remove_fav_prod' );

To this:

add_action( 'wp_ajax_nopriv_dicaprio_remove_fav_prod', 'dicaprio_remove_fav_prod' );
add_action( 'wp_ajax_dicaprio_remove_fav_prod', 'dicaprio_remove_fav_prod' );

You use same actions to add and remove items.

And one more: when you use somethink from user input ($_POST, $_GET, etc) – you must to sanitize this data before use.

More: https://developer.wordpress.org/themes/theme-security/data-sanitization-escaping/#example-simple-input-field

User contributions licensed under: CC BY-SA
2 People found this is helpful
Advertisement