Как в WordPress добавить произвольное поле в форму комментариев

Знаете ли вы, что в CMS WordPress помимо стандартных произвольных полей, знакомых большинству более или менее опытных пользователей, которые можно прикреплять к записям и страницам, существуют также аналогичные фиелды для комментариев? Если нет, то пример, показанный ниже наверное вам очень сильно пригодится.

<?php
// Показываем поле Город:
function add_city_comment_form_field($default) {
    $commenter = wp_get_current_commenter();
    $default['fields']['email'] .= '<p class="comment-form-author">' .
            '<label for="city">Город:</label>
        <span class="required">*</span>
        <input id="city" name="city" size="30" type="text" /></p>';
    return $default;
}

// Проверяем, что поле Город заполнено пользователем:
function verify_comment_city_data($commentdata) {
    if (!isset($_POST['location'])) :
        wp_die('Ошибка: пожалуйста заполните обязательное поле (город).');
    endif;
    return $commentdata;
}

// Показываем поле Город в комментариях:
function attach_city_to_author($author) {
    $city = get_comment_meta(get_comment_ID(), 'location', true);
    if ($location)
        $author .= " ($location)";
    return $author;
}

// Сохраняем значение поля Город в базу данных:
function save_comment_city_data($comment_id) {
    add_comment_meta($comment_id, 'location', $_POST['location']);
}

add_filter('comment_form_defaults', 'add_city_comment_form_field'); // показываем поле
add_filter('preprocess_comment', 'verify_comment_city_data'); // проверяем данные поля
add_filter('get_comment_author_link', 'attach_city_to_author'); // показываем поле в комментариях
add_action('comment_post', 'save_comment_city_data'); // сохраняем данные поля
?>

При этом перед копипастом сего сниппета в functions.php читателю нужно проверить, использует ли его тема стандартную функцию comment_form() или нет. В последнем случае данный код придется немного изменить. "Как?", - это зависит от конкретного WordPress шаблона. Для примера я добавил 1 новое произвольное поле к форме комментирования - город (city).

Данный пример вы можете опробовать на дефолтной Twenty Twelve.





© 2012-2014 Druweb.ru. Вы можете спокойно копировать любые материалы сайта только при наличии обратной ссылки.