@Genri_Rus

Как более лучше оптимизировать код для добавления товаров в избранное?

Вообщем нужно как-то сделать так, чтобы избранные работали по такой схеме:
5e52db08849fb050591244.png
При клике по иконке добавляется товар в избранное, далее при повторном клике - товар удаляется из избранного
Также выводится счетчик (counter), если массив $data пустой, то $counter = 1;
Как вообще оптимизировать вывод counter ? Или если работает, то оставить так ?
Вот пример:
function add_to_id() {
  if ( isset( $_POST['variation_id'] ) && ! empty( $_POST['variation_id'] ) ) {
    $value = intval( $_POST['variation_id'] );
  } else if ( isset( $_POST['product_id'] ) && ! empty( $_POST['product_id'] ) ) {
    $value = intval( $_POST['product_id'] );
  } else {
    wp_send_json_error();
  }
  
  $counter = 0;

  if ( isset( $_COOKIE['wp_id'] ) ) {
    $data = [];
    $data = explode( ',', $_COOKIE['wp_id'] );

    if ( in_array( $value, $data ) ) {
      unset( $data[ array_search( $value, $data ) ] );

      $value = implode( ',', $data );

      setcookie( "wp_id", $value, time()+86400 * 30, COOKIEPATH, COOKIE_DOMAIN );
      wp_send_json_success( count( $data ) );
      return;
    }

    array_push( $data, $value );
    $value = implode( ',', $data );
  }

  setcookie( "wp_id", $value, time()+86400 * 30, COOKIEPATH, COOKIE_DOMAIN );
  
  if ( !empty( $data ) ) {
    wp_send_json_success( count( $data ) );
  } else {
    wp_send_json_success( $counter + 1 );
  }
}
  • Вопрос задан
  • 98 просмотров
Решения вопроса 1
nokimaro
@nokimaro
Меня невозможно остановить, если я смогу начать.
Не понятно требование для пустой $data отправлять 1, а не 0
То есть если было одно значение в избранном и стало ноль, то посылаем 1 и при этом если было ноль и добавили первое значение то всё-равно посылаем 1?

<?php
function add_to_id()
{
    if(isset($_POST['variation_id']) && !empty($_POST['variation_id']))
    {
        $value = intval($_POST['variation_id']);
    }
    elseif(isset($_POST['product_id']) && !empty($_POST['product_id']))
    {
        $value = intval($_POST['product_id']);
    }
    else
    {
        wp_send_json_error();
    }

    $data = [];
    if(isset($_COOKIE['wp_id']))
    {
        foreach(explode(',', $_COOKIE['wp_id']) as $val)
        {
            if(!empty($val))
            {
                $data[$val] = $val;
            }
        }
    }
    
    //удаляем value если оно было среди значение в cookie
    if(isset($data[$value]))
    {
        unset($data[$value]);
    }
    else
    {
        $data[$value] = $value;
    }

    setcookie("wp_id", implode(',', $data), time() + 86400 * 30, COOKIEPATH, COOKIE_DOMAIN);

    //если человек кликнул - $data: 1, а при повторном клике (по той же иконке) - $data: 0
    wp_send_json_success(count($data));
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы