Cum adaugi o clasă la butonul de trimitere comentariu?
Începând cu WordPress versiunea 4.1 (trac ticket #20446), acum este posibil să transmiți propria clasă ca argument al funcției comment_form($args)
folosind cheia de array 'class_submit'
:
$args = array( 'class_submit' => 'btn btn-default' );
Nu mai este nevoie de muncă suplimentară. (Am editat și Codex-ul) :)

Lucrez și cu framework-ul Foundation. Am descoperit că cea mai ușoară modalitate de a adăuga o clasă unui element care nu poate fi filtrat este să o faci cu jQuery.
jQuery(document).ready(function($) { //wrapper noconflict
$('input#submit').addClass('button');
});//sfârșit noconflict

Nu m-am gândit niciodată la asta. E un hack, dar mai curat decât să modifici nucleul. Copiez codul tău acum!

Am deja un site intens folosit cu jQuery. Așa că adăugarea acestui fragment de cod a fost foarte ușoară și a funcționat perfect.

Dacă verifici sursa funcției comment_form()
, vei observa că nu afișează nici măcar o clasă pe input;
<input name="submit" type="submit" id="<?php echo esc_attr( $args['id_submit'] ); ?>" value="<?php echo esc_attr( $args['label_submit'] ); ?>" />
Presupun că ai nevoie să adaugi o clasă pentru stilizare? De ce nu modifici CSS-ul tău să fie pur și simplu;
input.submit, #buttonPro {
/* un stil minunat */
}
Altfel, cred că cea mai 'ușoară' soluție ar fi să copiezi funcția în functions.php
, să o redenumești, să adaugi un argument pentru clasă și să o afișezi, apoi să o folosești în loc de cea originală - pe care o poți găsi aici ;)

Mulțumesc pentru sfaturi și formularul de comentarii. :) Am o opțiune în temă care ajută la stilizarea acesteia în funcție de faptul că are o interfață deschisă sau întunecată. Dacă ar exista o funcție simplă care să adauge o clasă, aș putea încadra acea funcție într-o declarație if:isdark. Va trebui să analizez mai atent funcția longform pe care ai furnizat-o.

În tema mea Oenology, afișez CSS personalizat în funcție de faptul dacă schema de culori curentă este întunecată sau deschisă. Iată \functions\options.php
fișierul care se ocupă de toată munca grea.

De ce ai nevoie de o clasă pe butonul de trimitere? Poți să-i dai un ID, după cum ai descoperit, și asta e tot ce ai nevoie pentru a-l stiliza.
comment_form(array('id_submit'=>'buttonPro'));
Apoi pentru a-l stiliza:
input#buttonPro {...}
Simplu. Sau, dacă preferi să folosești doar clase din anumite motive:
.form-submit input {...}
Nu văd niciun avantaj, din nicio perspectivă, să pui o clasă pe butonul de trimitere al formularului de comentarii.

Absolut. Dacă aveți nevoie de o specificitate mai mare, țintiți selectorii CSS mai sus în ierarhie. Uitați-vă la ID-ul sau clasa containerului care conține formularul de răspuns la comentarii, sau care conține întregul markup al comentariilor. De asemenea, ar trebui să existe doar un singur formular de răspuns la comentarii pe orice pagină, așa că nu văd niciun risc în a ținti ID-ul butonului de trimitere, transmis prin argument, pentru aplicarea CSS.

Cu tot respectul, nu sunt de acord. Am un website+blog. Am definit o clasă și am folosit-o pentru toate butoanele. De asemenea, am diferite stări pentru butoane (normal, hover). Dacă nu aș aplica o clasă butonului de comentariu, atunci ar însemna că trebuie să țintesc butonul de comentariu al blogului după ID și să adaug selectorul chiar lângă clasa deja definită (separate prin virgulă). Asta înseamnă că nu pot folosi clasa deja definită și acest lucru nu este preferabil. Pur și simplu aplicarea numelui clasei pe buton face viața mult mai ușoară fără să fie nevoie să adaug manual ID-ul și păstrează totul simplu.

Devner: Folosiți CSS exact invers față de modul în care este destinat să fie folosit. Numele de clase și ID-uri ar trebui definite semantic, nu în funcție de cum doriți să fie stilizate. Ideea principală este să puteți schimba CSS-ul în loc să schimbați HTML-ul, deoarece HTML-ul este adesea generat, în timp ce CSS-ul este mult mai ușor de modificat.

Unele framework-uri, cum ar fi Bootstrap, oferă stiluri pentru butoane pe clasă, de exemplu .btn - deși nu este o problemă mare, ar fi mai ușor dacă s-ar putea adăuga o clasă.

Știu că acest lucru are deja câțiva ani, dar sunt surprins de această afirmație: "Nu văd niciun avantaj, din nicio perspectivă, să adaugi o clasă pe butonul de trimitere al formularului de comentarii." De ce să adaugi un ID suplimentar în fișierul de stiluri când o clasă existentă (de exemplu pentru stilizarea butoanelor) poate oferi stilizarea de care ai nevoie?

Chris: Pentru că HTML-ul ar trebui să fie semantic. Fișierele de stiluri ar trebui modificate pentru a schimba "aspectul" lucrurilor, în timp ce HTML-ul ar trebui să descrie conținutul. Modificarea HTML-ului pentru a obține o schimbare în "aspect" este exact ceea ce fișierele de stiluri au fost create să evite în primul rând.

Otto, sincer nu pot înțelege cum punctul tău de vedere după atâția ani pare să fie același. Ce zici de Bootstrap, Foundation și alte framework-uri? Ele folosesc fie <button>
fie o clasă "button". Există numeroase patch-uri care pur și simplu adaugă o clasă, care e marele afac? De ce pare că această problemă este ținută în loc de câțiva (încăpățânați) oameni, stricând clar experiența pentru restul? Care e rostul ca eu să fiu nevoit să copiez întregul fișier pe care @TheDeadMedic a fost atât de amabil să-l pună la dispoziție? În loc de asta, voi ați putea rezolva problema adăugând 2 linii în core și să fie gata! Bizar!

@Otto Nu înțeleg cum merg înapoi. Pe lângă motivele pe care le-am menționat mai sus, nu doresc să folosesc ID-uri nicăieri în fișierul meu de stiluri, deoarece vreau să evit problemele de specificitate care pot apărea din cauza utilizării lor. Încerc pur și simplu să reutilizez clasele pe care le-am definit deja fără a fi nevoit să fac nimic în plus. Da, dacă adăugarea atributului de clasă mă va ajuta să nu mă mai preocup de problemele de specificitate și să-mi păstrez codul consistent, optez pentru ele. Clasele există pentru un motiv și eu susțin acele motive. De asemenea, nu văd cum adăugarea de nume de clase ar face codul nesemantic.

Căutam aceeași soluție și în sfârșit am găsit rezolvarea, codul de mai jos a funcționat perfect pentru mine. Am dorit să adaug clasa "btn btn-primary" butonului de trimitere din formularul de comentarii.
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);
Argumentele $args pe care le-am folosit sunt
$args = array(
'comment_field' => '<p class="comment-form-comment"><label for="comment">Comentariu</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">Nume <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">Website</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">Anulează răspunsul</button>',
'label_submit' => 'Trimite comentariu',);

Voi răspunde (târziu) deoarece am căutat un răspuns la această întrebare și am decis să o rezolv eu însumi.
În primul rând, pentru a răspunde la întrebarea "de ce să adaugi o clasă?"... În cazul meu, am ales să folosesc un framework UI numit Foundation pentru a proiecta cea mai recentă temă a blogului meu personal. L-am ales tocmai pentru că îmi place stilul său pentru butoane. Totuși, acesta necesită ca dezvoltatorul să adauge o clasă unui buton <input>
, iar eu nu am realizat că acest lucru nu poate fi făcut în WP până când nu am fost aproape gata cu tema!
Așadar, iată ce am făcut. A trebuit să editez fișierul /wp-includes/comment-template.php
, așa că folosește la propriul risc, deoarece acesta ar putea fi șters în timpul unei actualizări WP.
După linia 1540
(în versiunea 3.2.1) adăugați următoarea linie:
'class_submit' => 'submit',
Apoi modificați linia 1576
în următoarea:
<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'] ); ?>" />
Acum aveți o nouă valoare implicită numită class_submit
care poate fi inclusă în parametrul array $args
al funcției comment_form()
:
<?php comment_form(
array(
'class_submit' => __('XXX'),
)
); ?>
Distracție cu WordPress!

este o idee proastă să modifici fișierele de bază și pe acest site unii oameni iau asta personal. Deoarece ești nou aici, voi anula votul negativ pe care l-a lăsat altcineva. Dar acum știi.

Alex, Taylor are dreptate. NICIODATĂ să nu modifici fișierele de bază! NICIODATĂ!
