Cum adaugi o clasă la butonul de trimitere comentariu?

10 iun. 2011, 19:01:47
Vizualizări: 29K
Voturi: 7

Cum pot adăuga o clasă la butonul de trimitere comentarii? Funcția simplificată comment_form(array('id_submit'=>'buttonPro')); modifică doar id-ul, iar class_submit nu pare să existe.

Am citit atât articolul lui Otto cât și al lui Beau dar fără succes.

0
Toate răspunsurile la întrebare 7
1
16

Î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) :)

28 feb. 2015 16:07:47
Comentarii

Acesta ar trebui să fie răspunsul corect.

Christine Cooper Christine Cooper
11 apr. 2015 22:00:01
3

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
30 iul. 2012 20:55:41
Comentarii

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

ageektrapped ageektrapped
1 nov. 2012 21:28:12

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.

Jamie Jamie
10 feb. 2013 06:03:09

Doar o notă pentru cititorii viitori, este foarte posibil ca stilizarea să arate foarte distorsionată la fiecare încărcare de pagină în funcție de timpul de încărcare a js, aș evita acest tip de modificare a claselor acolo unde este posibil

Cacoon Cacoon
30 mai 2018 00:53:18
2

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 ;)

10 iun. 2011 19:14:34
Comentarii

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.

MTT MTT
10 iun. 2011 19:22:31

Î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.

Chip Bennett Chip Bennett
10 iun. 2011 19:43:18
9

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.

10 iun. 2011 19:37:05
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.

Chip Bennett Chip Bennett
10 iun. 2011 19:41:27

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 Devner
16 nov. 2012 21:19:15

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.

Otto Otto
17 nov. 2012 02:28:48

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ă.

henrywright henrywright
18 sept. 2013 19:11:27

Ș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 Ferdinandi Chris Ferdinandi
15 oct. 2013 17:51:37

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 Otto
16 oct. 2013 15:35:13

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!

User User
5 iun. 2014 16:33:38

@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.

Devner Devner
23 sept. 2014 16:06:50

Te duci înapoi pentru că încerci să modifici codul tău HTML pentru a obține o schimbare în prezentare. Modificarea prezentării este sarcina fișierului de stiluri și ar trebui să fie lucrul pe care încerci să-l schimbi aici.

Otto Otto
23 sept. 2014 19:38:15
Arată celelalte 4 comentarii
0

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',);
17 dec. 2013 12:31:35
0

Sugerez celor care au această problemă să seteze un stil pentru ID-ul "post-comment", așa cum am făcut eu:

#post-comment {
background: none repeat scroll 0 0 transparent;
border: 1px solid #FFFFFF;
padding: 8px 20px;
float: left;}

Mult succes! :)

8 iul. 2012 12:47:13
3
-3

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!

19 oct. 2011 05:07:35
Comentarii

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.

MTT MTT
19 oct. 2011 14:50:20

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

Devner Devner
16 nov. 2012 21:23:16

NICIODATĂ să nu modifici fișierele de bază.

Rantiev Rantiev
17 aug. 2014 21:25:42