Как остановить процесс отправки комментария, если поле пустое?


У меня есть форма комментариев, и в этой форме комментариев я добавил дополнительное поле ввода с именем "review_title". Когда кто-то отправляет комментарий из комментария, он вставляется совершенно нормально, и дополнительное поле вставляется в мета-комментарий. Хочу, чтобы я добился проверки на стороне сервера при отправке комментария, которая проверяет, пусто ли дополнительное поле, и если дополнительное поле пустое, то остановите публикацию комментария сценарием. Вот мой попытка:

Это форма:

<form action="http://localhost/test/wp-comments-post.php" method="post" id="commentform" class="comment-form">
    <p class="comment-form-title">
        <label for="pmg_comment_title">Review Title</label>
        <input type="text" name="review_title" id="pmg_comment_title" />
    </p>
    <p class="comment-form-comment">
        <label for="comment">Comment</label> 
        <textarea id="comment" name="comment" required="required"></textarea> 
    </p>
    <input name="submit" type="submit" id="submit" value="Post Comment" />
</form>

Это функция, с помощью которой я пытался это сделать:

function verify_comment_meta_data( $commentdata ) {
if (!isset($_POST['review_title']))
        wp_die( __( 'Error: please fill the required field (city).' ) );
    return $commentdata;
}
add_filter( 'preprocess_comment', 'verify_comment_meta_data' );

К сожалению, это вообще ничего не дает, если я оставлю поле "review_title" пустым, он все равно опубликует комментарий только без этого поля.

Итак, мой вопрос в том, как остановить отправку комментария, если поле "review_title" пустое?

 2
Author: Noob17, 2016-03-06

1 answers

Если вы используете wp-comments-post.php, было бы лучше настроить форму комментария с помощью крючка comment_form_default_fields, я не знаю, зачем вы создаете новый. Но в соответствии с вашими функциями вы можете справиться с этим так

add_filter( 'preprocess_comment', 'verify_comment_meta_data', 1, 1 );
function verify_comment_meta_data( $commentdata )
{
    $commentdata['review_title'] = ( ! empty ( $_POST['review_title'] ) ) ? sanitize_text_field( $_POST['review_title'] ) : false;
    if ( ! $commentdata['review_title'] )
        wp_die( __( '<strong>ERROR</strong>: please fill the required fields ( city ).', 'textdomain' ) );
     return $commentdata;
}

На самом деле, как рабочий процесс комментариев WordPress, сообщения об ошибках могут обрабатываться огнем pre_comment_on_post, check_comment_flood, или pre_comment_approved.

 4
Author: Jevuska, 2016-03-07 03:26:50