Как добавить класс к кнопке отправки комментария?
Как добавить класс к кнопке отправки комментария? Упрощенная функция
comment_form(array('id_submit'=>'buttonPro'));
очевидно меняет только id, а параметр class_submit
, похоже, не существует.

Начиная с WordPress версии 4.1 (тикет trac #20446), появилась возможность передавать собственный класс в качестве аргумента функции comment_form($args)
, используя ключ массива 'class_submit'
:
$args = array( 'class_submit' => 'btn btn-default' );
Теперь не нужно выполнять лишнюю работу. (Кодекс также был обновлен) :)

Я также работаю с фреймворком Foundation. Я обнаружил, что самый простой способ добавить класс к элементу, который нельзя изменить через фильтры, — это сделать это с помощью jQuery.
jQuery(document).ready(function($) { //обёртка для noconflict
$('input#submit').addClass('button');
});//конец noconflict

Никогда не думал об этом. Это хак, но чище, чем изменять ядро. Копирую ваш код прямо сейчас!

У меня уже есть активно используемый сайт с jQuery. Так что добавление этого куска кода было очень простым и сработало идеально.

Если вы посмотрите исходный код функции comment_form()
, то увидите, что она даже не выводит класс для input;
<input name="submit" type="submit" id="<?php echo esc_attr( $args['id_submit'] ); ?>" value="<?php echo esc_attr( $args['label_submit'] ); ?>" />
Полагаю, вам нужно добавить класс для стилизации? Почему бы не изменить ваш CSS следующим образом:
input.submit, #buttonPro {
/* какой-то крутой стиль */
}
В противном случае, самое простое решение — просто скопировать функцию в ваш functions.php
, переименовать её, добавить аргумент класса и его вывод, а затем использовать её — что вы можете найти здесь ;)

Спасибо за совет и форму комментариев. :) У меня есть опция темы, которая помогает стилизовать тему в зависимости от того, светлый или темный интерфейс используется. Если бы была простая функция, которая могла бы добавить класс, я мог бы обернуть эту функцию в условие типа if:isdark. Мне нужно внимательнее изучить функцию longform, которую вы предоставили.

В моей теме Oenology я вывожу пользовательский CSS в зависимости от того, используется темная или светлая цветовая схема. Вот \functions\options.php
файл, который выполняет основную работу.

Зачем нужен класс на кнопке отправки? Вы можете присвоить ей ID, как вы уже обнаружили, и этого будет достаточно для стилизации.
comment_form(array('id_submit'=>'buttonPro'));
Затем для стилизации:
input#buttonPro {...}
Просто. Или, если вы предпочитаете использовать только классы по какой-то причине:
.form-submit input {...}
Я не вижу никакого преимущества в добавлении класса на кнопку отправки формы комментариев, ни с какой точки зрения.

Абсолютно верно. Если вам нужна большая специфичность, нацеливайте ваши CSS-селекторы выше в иерархии. Посмотрите на ID или класс контейнера, который содержит форму ответа на комментарий, или который содержит всю разметку комментариев. Кроме того, на любой странице должна быть только одна форма ответа на комментарий, поэтому я не вижу вреда в том, чтобы нацеливаться на ID кнопки отправки, переданного через аргумент, для применения CSS.

С уважением, я не согласен. У меня есть сайт+блог. Я определил класс и использовал его для всех кнопок. Также у меня есть разные состояния для кнопок (обычное, при наведении). Если бы я не применял класс к кнопке комментария, это означало бы, что мне нужно нацелиться на кнопку комментария блога по ID и начать добавлять селектор рядом с уже определенным классом (через запятую). Это значит, что я не могу использовать уже определенный класс, и это нежелательно. Простое применение имени класса к кнопке значительно облегчает жизнь, избавляя от необходимости добавлять ID вручную, и делает всё проще.

Devner: Вы используете CSS в точности наоборот тому, как он задумывался. Имена классов и ID должны определяться семантически, а не в соответствии с тем, как вы хотите их стилизовать. Весь смысл в том, чтобы иметь возможность изменить CSS, а не HTML, потому что HTML часто генерируется, в то время как CSS гораздо легче изменить.

Некоторые фреймворки, такие как Bootstrap, предоставляют стили для кнопок через классы, например .btn. Хотя это не является большой проблемой, было бы удобнее, если бы можно было добавить класс.

Я понимаю, что с момента публикации прошло несколько лет, но меня удивляет это утверждение: "Я не вижу никаких преимуществ, с какой стороны ни посмотри, в добавлении класса к кнопке отправки формы комментария." Зачем добавлять дополнительный ID в таблицу стилей, если существующий класс (например, для стилизации кнопок) может обеспечить нужное оформление?

Крис: Потому что HTML должен быть семантическим. Таблицы стилей следует изменять для изменения "внешнего вида", в то время как HTML должен описывать содержание. Изменение HTML для достижения изменений во "внешнем виде" — это именно то, от чего изначально были созданы таблицы стилей.

Отто, я искренне не могу понять, что ваша точка зрения после всех этих лет по-прежнему остаётся прежней. Как насчёт Bootstrap, Foundation и других фреймворков? Они используют либо <button>
, либо класс "button". Существует множество патчей, которые просто добавляют класс, в чём проблема? Почему кажется, что этот вопрос сдерживается несколькими (упрямыми) людьми, явно портящими его для всех остальных? Какой смысл мне копировать весь файл, который @TheDeadMedic любезно предоставил? Вместо этого вы могли бы решить проблему, добавив 2 строки в ядро и покончить с этим! Странно!

@Otto Я не понимаю, как я двигаюсь назад. Помимо причин, которые я указал выше, я не хочу использовать ID в своей таблице стилей, так как хочу избежать проблем со специфичностью, которые могут возникнуть из-за их использования. Я просто пытаюсь повторно использовать классы, которые уже определил, без необходимости делать что-то дополнительное. Да, если добавление атрибута class поможет мне не беспокоиться о проблемах специфичности и сохранить мой код последовательным, я выбираю их. Классы существуют по определённой причине, и я выступаю за эти причины. Также я не понимаю, как добавление имён классов сделает код не семантичным.

Я искал такое же решение и наконец нашел его. Приведенный ниже код отлично сработал для меня - я хотел добавить класс "btn btn-primary" к кнопке отправки в форме комментариев.
ob_start();
comment_form( $args );
$form = ob_get_clean();
$form = str_replace('class="comment-form"','class="comment-form"', $form);
echo str_replace('id="submit"','class="btn btn-primary"', $form);
Аргументы $args, которые я использовал:
$args = array(
'comment_field' => '<p class="comment-form-comment"><label for="comment">Комментарий</label> <textarea class="form-control" id="comment" name="comment" cols="35" rows="12" aria-required="true"></textarea></p>',
'fields' => array(
'author' => '<p class="comment-form-author"><label for="author">Имя <span class="required">*</span></label> <input class="form-control input-comment-author" id="author" name="author" type="text" value="" size="30" aria-required="true"></p>',
'email' => '<p class="comment-form-email"><label for="email">Email <span class="required">*</span></label> <input class="form-control input-comment-email" id="email" name="email" type="text" value="" size="30" aria-required="true"></p>',
'url' => '<p class="comment-form-url"><label for="url">Вебсайт</label> <input class="form-control input-comment-url" id="url" name="url" type="text" value="" size="30"></p>',
),
'cancel_reply_link' => '<button class="btn btn-danger btn-xs">Отменить ответ</button>',
'label_submit' => 'Отправить комментарий',);

Я рекомендую тем, у кого есть эта проблема, задать стиль для идентификатора "post-comment", как это сделал я:
#post-comment {
background: none repeat scroll 0 0 transparent; /* Прозрачный фон */
border: 1px solid #FFFFFF; /* Белая рамка толщиной 1px */
padding: 8px 20px; /* Внутренние отступы 8px сверху/снизу и 20px слева/справа */
float: left; /* Выравнивание по левому краю */}
Удачи! :)

Отвечу с опозданием, так как сам искал ответ на этот вопрос и решил разобраться самостоятельно.
Во-первых, на вопрос "зачем добавлять класс?"... В моем случае я выбрал фреймворк Foundation для разработки новой темы для личного блога. Я выбрал его именно из-за понравившегося мне стиля кнопок. Однако он требует, чтобы разработчик добавлял класс к кнопке <input>
, и я не осознавал, что в WordPress это невозможно сделать стандартными средствами, пока почти не завершил работу над темой!
Вот что я сделал. Мне пришлось редактировать файл /wp-includes/comment-template.php
, так что делайте это на свой страх и риск - изменения могут быть потеряны при обновлении WordPress.
После строки 1540
(в версии 3.2.1) добавьте следующую строку:
'class_submit' => 'submit',
Затем измените строку 1576
на следующую:
<input name="submit" class="<?php echo esc_attr( $args['class_submit'] ); ?>" type="submit" id="<?php echo esc_attr( $args['id_submit'] ); ?>" value="<?php echo esc_attr( $args['label_submit'] ); ?>" />
Теперь у вас есть новое значение по умолчанию class_submit
, которое можно передавать в массиве параметров $args
функции comment_form()
:
<?php comment_form(
array(
'class_submit' => __('XXX'),
)
); ?>
Удачной работы с WordPress!

Это плохая идея — изменять ядро системы, и на этом сайте некоторые воспринимают это лично. Поскольку вы новичок, я уберу минус, который вам поставили. Но теперь вы знаете.

Алекс, Тейлор прав. НИКОГДА не изменяйте файлы ядра! НИКОГДА И НИ ЗА ЧТО!
