Я ищу код, который позволит мне собирать звездные отзывы о продуктах WooCommerce, не требуя от пользователей каких-либо комментариев.
Этот код ниже дает мне почти то же самое, исключая поле для комментариев, но WordPress не позволяет сохранять отправку. Чего-то не хватает в этом коде?
function filter_woocommerce_product_review_comment_form_args( $comment_form ) {
if ( function_exists( 'WC' ) && is_product() ) {
$comment_form['comment_field'] = '<div class = "comment-form-rating"><label for = "rating">' . esc_html__( 'Your rating', 'your-theme-text-domain' ) . '</label><select name = "rating" id = "rating" required>
<option value = "">' . esc_html__( 'Rate…', 'your-theme-text-domain' ) . '</option>
<option value = "5">' . esc_html__( 'Perfect', 'your-theme-text-domain' ) . '</option>
<option value = "4">' . esc_html__( 'Good', 'your-theme-text-domain' ) . '</option>
<option value = "3">' . esc_html__( 'Average', 'your-theme-text-domain' ) . '</option>
<option value = "2">' . esc_html__( 'Not that bad', 'your-theme-text-domain' ) . '</option>
<option value = "1">' . esc_html__( 'Very poor', 'your-theme-text-domain' ) . '</option>
</select></div>';
$comment_form['fields']['author'] = '';
$comment_form['fields']['email'] = '';
$comment_form['fields']['url'] = '';
$comment_form['comment_notes_before'] = '';
$comment_form['label_submit'] = esc_html__( 'Submit Review', 'your-theme-text-domain' );
$comment_form['title_reply'] = esc_html__( 'Leave a Review', 'your-theme-text-domain' );
}
return $comment_form;
}
add_filter( 'woocommerce_product_review_comment_form_args', 'filter_woocommerce_product_review_comment_form_args' );
Данные поля комментария comment_content
будут проверены на наличие дубликатов. Поскольку вы удалили поле, данные будут пустыми. Таким образом, в представлении формы всегда будет указано, что он уже существует. Чтобы обойти это, используйте приведенный ниже код
add_filter('duplicate_comment_id', 'allow_duplicate_comments_with_empty_data', 10, 2);
function allow_duplicate_comments_with_empty_data($dupe_id, $commentdata) {
// Return false to allow duplicate as the content will be always empty in this case.
return false;
}
Вы можете минимизировать приведенный выше код, используя приведенный ниже код.
add_filter('duplicate_comment_id', '__return_false');
Добавьте приведенный ниже код, чтобы разрешить пустые комментарии.
add_filter('allow_empty_comment', '__return_true');
Просто добавьте строку после кода add_filter('duplicate_comment_id', '__return_false');
Спасибо. Я попытался просто добавить эту строку кода в конец своего кода и запустил фрагмент. Я проверил код, выбрав количество звезд, и когда я нажимаю «Отправить отзыв», я получаю то же сообщение об ошибке «Ошибка: введите текст вашего комментария». Почему-то Woocommerce не примет заявку. Любые другие способы обойти это?
@Parham добавьте код add_filter('allow_empty_comment', '__return_true');
вместе с другим
Вы удивительны, спасибо. Я думаю, что изначально неправильно вас понял, но поскольку я добавил обе эти отдельные строки кода в конец своего кода, теперь он принимает комментарии только с рейтингом звезд. Также кажется, что имя и дата вошедшего в систему пользователя отображаются над звездным рейтингом. Можно ли скрыть и эту информацию?
Например, вместо того, чтобы добавлять приведенный ниже образец кода CSS, есть ли способ добавить код PHP? .woocommerce .star-rating + span.reviewer, .woocommerce .star-rating + span.woocommerce-review-date { display: none; }
@Parham Какая тема активна?
В настоящее время у меня есть тема ASTRA.
Спасибо вам за ваши предложения. Это потрясающе. Можете ли вы объединить предложенный вами код с моим, чтобы я мог точно видеть, как вы предлагаете исправить проблему, и чтобы я не напортачил?