Обязательное поле сделать необязательным без плагина

Тема в разделе "Wordpress", создана пользователем Kavabanga, 25 июл 2018.

  1. Kavabanga

    Kavabanga

    Регистрация:
    18 июн 2017
    Сообщения:
    22
    Симпатии:
    0
    Помогите, пожалуйста! Магазин на Woocommerce. В карточке товара можно оставить отзыв о товаре и там обязательные поля (для гостей (процедура регистрации - входа в личный кабинет по ненадобности убрана)) Отзыв, Email, Имя - все обязательные. Нужно сделать поле Email необязательным. Пробовал вырезать это поле в файле шаблона темы "Комментарии" - после комментирования или удаления кода - нет никаких изменений на сайте (все кэши почищены). Управление из админки: в Woocommerce можно только включить-отключить отзывы. Снятие галочки в настройках движка о том что "Автор комментария должен указать имя и email" ничего не меняет. Все равно поле обязательное. Вступают изменения только манипуляции со стилями. Меня полностью устраивает эта форма комментирования (отзывов на товары) и не хочу использовать плагины, только изменить обязательность этого поля... Кстати в коде прописано поле Сайт (url), но изначально вообще не отображается на сайте. Я думаю тут виновник именно Woocommerce.
     
  2. Bnopen

    Bnopen Команда форума

    Регистрация:
    3 мар 2013
    Сообщения:
    1.264
    Симпатии:
    534
    Kavabanga, попробуйте в файле woocommerce/templates/single-product-reviews.php поменять строку

    PHP:
    '<input id="email" name="email" type="email" value="' esc_attr$commenter['comment_author_email'] ) . '" size="30" aria-required="true" required /></p>
    на

    PHP:
    '<input id="email" name="email" type="email" value="' esc_attr$commenter['comment_author_email'] ) . '" size="30" aria-required="false" /></p>
    И потом еще в файле /wp-content/plugins/woocommerce/includes/class-wc-comments.php возможно нужно поправить код.
     
    $iD нравится это.
  3. Kavabanga

    Kavabanga

    Регистрация:
    18 июн 2017
    Сообщения:
    22
    Симпатии:
    0
    Получилось, правда может не совсем корректно. Когда изменил первый файл, перестало выскакивать сообщение об обязательности заполнения данного поля, но видимо валидация не пропускала публикацию отзыва.
    Во втором файле не знаю как правильно и красиво исправить, как я понял валидацию, (не знаю php), но помогло комментирования данного блока:
    PHP:
    public static function comment_moderation_recipients$emails$comment_id ) {
           
    $comment get_comment$comment_id );

           if ( 
    $comment && 'product' === get_post_type$comment->comment_post_ID ) ) {
               
    $emails = array( get_option'admin_email' ) );
           }

           return 
    $emails;
    после комментирования, публикуется отзыв, все работает.
    если знаете как сделать аккуратней или лучше (правка второго файла), подскажите, пожалуйста.
    Спасибо за помощь!
    --- Добавлено, 26 июл 2018 ---
    Есть все-таки баг такого тупого комментирования. На сайте я же для теста делал пару отзывов, чтобы глянуть весь процесс. Естественно вводил свой почтовый ящик. Теперь без обязательного поля Email + я его скрыл, уведомления об оставленном отзыве приходят на тот почтовый ящик, который я указывал, когда писал тестовые отзывы. В админке сайта прописан совсем другой почтовый ящик. Сделал поиск в базе данных - ничего не нашло. Не знаю где он хранится...
     
  4. Kavabanga

    Kavabanga

    Регистрация:
    18 июн 2017
    Сообщения:
    22
    Симпатии:
    0
    Может кому-нибудь понадобится решение. Выше код не тот - это отправка письма об отзыве на почту админа. Нужный код находится ниже в файле и выглядит так:
    PHP:
    public static function add_comment_purchase_verification$comment_id ) {
           
    $comment  get_comment$comment_id );
           
    $verified false;
           if ( 
    'product' === get_post_type$comment->comment_post_ID ) ) {
               
    $verified wc_customer_bought_product$comment->comment_author_email$comment->user_id$comment->comment_post_ID );
               
    add_comment_meta$comment_id'verified', (int) $verifiedtrue );
           }
           return 
    $verified;
       }
    В этом коде я удалил вот эту часть:
    PHP:
    $comment->comment_author_email,
    "Баг" с отправкой письма не на админскую почту, которая указана в настройках Wordpress решен изменением этой почты в настройках пользователя. Т.е. уведомления отправляются на почту, которая прописана в настройках пользователя, а не в настройках Wordpress.