Come aggiungere una classe al pulsante di invio dei commenti?

10 giu 2011, 19:01:47
Visualizzazioni: 29K
Voti: 7

Come posso aggiungere una classe al pulsante di invio dei commenti? La funzione semplificata comment_form(array('id_submit'=>'buttonPro')); ovviamente modifica solo l'id e class_submit sembra non esistere.

Ho letto sia gli articoli di Otto che di Beau ma senza successo.

0
Tutte le risposte alla domanda 7
1
16

A partire dalla versione 4.1 di WordPress (trac ticket #20446) è stato aggiunto il supporto per passare la propria classe come argomento di comment_form($args) utilizzando la chiave dell'array 'class_submit':

$args = array( 'class_submit' => 'btn btn-default' );

Non è necessario fare ulteriori lavori manuali. (Ho anche modificato il Codex) :)

28 feb 2015 16:07:47
Commenti

Questa dovrebbe essere la risposta corretta.

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

Sto lavorando con il framework Foundation. Ho scoperto che il modo più semplice per aggiungere una classe a un elemento non filtrabile è farlo con jQuery.

jQuery(document).ready(function($) { //wrapper noconflict
    $('input#submit').addClass('button');
});//fine noconflict
30 lug 2012 20:55:41
Commenti

Non ci avevo mai pensato. È un po' un hack, ma più pulito che modificare il core. Copio subito il tuo codice!

ageektrapped ageektrapped
1 nov 2012 21:28:12

Ho già un sito che utilizza molto jQuery. Quindi aggiungere questo blocco di codice è stato davvero semplice e ha funzionato perfettamente.

Jamie Jamie
10 feb 2013 06:03:09

Giusto un appunto per i futuri lettori: è molto probabile che il tuo styling appaia molto distorto ad ogni caricamento della pagina, a seconda del tempo di caricamento del js. Consiglio di evitare questo tipo di modifica alle classi quando possibile.

Cacoon Cacoon
30 mag 2018 00:53:18
2

Se dai un'occhiata al sorgente della funzione comment_form(), vedrai che non stampa nemmeno una classe sull'input:

<input name="submit" type="submit" id="<?php echo esc_attr( $args['id_submit'] ); ?>" value="<?php echo esc_attr( $args['label_submit'] ); ?>" />

Immagino tu abbia bisogno di aggiungere una classe per lo stile? Perché non modificare il tuo CSS semplicemente con:

input.submit, #buttonPro {
    /* uno stile fantastico */
}

Altrimenti credo che la soluzione più "semplice" sarebbe copiare la funzione nel tuo functions.php, rinominarla, aggiungere un argomento per la classe e stamparla, e usare quella invece - che puoi trovare qui ;)

10 giu 2011 19:14:34
Commenti

Grazie per il consiglio e il modulo dei commenti. :) Ho un'opzione del tema che aiuta a stilizzare il tema in base a un'interfaccia chiara o scura. Se ci fosse una semplice funzione che potesse aggiungere una classe, potrei racchiuderla in un'istruzione if:isdark. Dovrò guardare più da vicino la funzione longform che hai fornito.

MTT MTT
10 giu 2011 19:22:31

Nel mio Tema Oenology, genero CSS personalizzato in base a se lo schema di colore corrente è scuro o chiaro. Ecco il \functions\options.php file che fa tutto il lavoro pesante.

Chip Bennett Chip Bennett
10 giu 2011 19:43:18
9

Perché hai bisogno di una classe sul pulsante di invio? Puoi assegnargli un ID, come hai scoperto, e questo è tutto ciò che ti serve per stilizzarlo.

comment_form(array('id_submit'=>'buttonPro'));

Poi per stilizzarlo:

input#buttonPro {...}

Semplice. Oppure, se preferisci usare solo le classi per qualche motivo:

.form-submit input {...}

Non vedo alcun vantaggio, da nessun punto di vista, nell'aggiungere una classe al pulsante di invio del modulo dei commenti.

10 giu 2011 19:37:05
Commenti

Assolutamente. Se hai bisogno di maggiore specificità, indirizza i tuoi selettori CSS più in alto nell'albero. Guarda l'ID o la classe del contenitore che ospita il modulo di risposta al commento, o che contiene l'intero markup dei commenti. Inoltre, dovrebbe esserci un solo modulo di risposta ai commenti in una determinata pagina, quindi non vedo il problema nel puntare all'ID del pulsante di invio, passato tramite argomento, per applicare il CSS.

Chip Bennett Chip Bennett
10 giu 2011 19:41:27

Con tutto il rispetto, sono in disaccordo. Ho un sito web+blog. Ho definito una classe e l'ho utilizzata per tutti i pulsanti. Inoltre ho diversi stati per i pulsanti (normale, hover). Se non applicassi una classe al pulsante del commento, significherebbe che dovrei puntare al pulsante del commento del blog tramite ID e iniziare ad aggiungere il selettore accanto alla classe già definita (separato da virgola). Ciò significa che non posso sfruttare la classe già definita e questo non è preferibile. Applicare semplicemente il nome della classe al pulsante rende la vita molto più semplice senza dover aggiungere manualmente l'ID e mantiene tutto semplice.

Devner Devner
16 nov 2012 21:19:15

Devner: Stai usando il CSS esattamente al contrario di come è pensato per essere utilizzato. I nomi delle classi e gli ID dovrebbero essere definiti semanticamente, non in base a come vuoi che siano stilizzati. Il punto è poter modificare il CSS invece di cambiare l'HTML, perché l'HTML è spesso generato, mentre il CSS è molto più facile da modificare.

Otto Otto
17 nov 2012 02:28:48

Alcuni framework come Bootstrap forniscono stili per i pulsanti attraverso classi, ad esempio .btn - sebbene non sia un grosso problema, sarebbe più semplice se potesse essere aggiunta una classe.

henrywright henrywright
18 set 2013 19:11:27

So che è passato diverso tempo, ma sono sorpreso da questa affermazione: "Non vedo alcun vantaggio, da nessun punto di vista, nell'aggiungere una classe al pulsante di invio del modulo di commento." Perché aggiungere un ID aggiuntivo al foglio di stile quando una classe esistente (ad esempio per lo stile dei pulsanti) può fornire lo stile necessario?

Chris Ferdinandi Chris Ferdinandi
15 ott 2013 17:51:37

Chris: Perché l'HTML dovrebbe essere semantico. I fogli di stile dovrebbero essere modificati per cambiare l'"aspetto" delle cose, mentre l'HTML dovrebbe descrivere il contenuto. Modificare l'HTML per ottenere un cambiamento nell'"aspetto" è esattamente ciò che i fogli di stile sono stati creati per evitare in primo luogo.

Otto Otto
16 ott 2013 15:35:13

Otto, sinceramente non riesco a capire come il tuo punto di vista dopo tutti questi anni sembri essere ancora lo stesso. Che mi dici di Bootstrap, Foundation e altri framework? Usano tutti o il tag <button> o una classe "button". Ci sono numerose patch che semplicemente aggiungono una classe, qual è il problema? Perché questa questione sembra essere ostacolata da poche persone (testarde), rovinando chiaramente l'esperienza per tutti gli altri? Che senso ha che io debba copiare l'intero file che @TheDeadMedic è stato così gentile da mettere a disposizione? Invece voi potreste risolvere il problema aggiungendo 2 righe nel core e chiuderla lì! Assurdo!

User User
5 giu 2014 16:33:38

@Otto Non capisco come io stia tornando indietro. A parte le ragioni che ho specificato sopra, non desidero usare ID da nessuna parte nel mio foglio di stile perché voglio evitare problemi di specificità che potrebbero sorgere usando quelli. Sto cercando semplicemente di riutilizzare le classi che ho già definito senza dover fare nulla di extra. Sì, se aggiungere un attributo classe mi aiuterà a non preoccuparmi dei problemi di specificità e a mantenere il mio codice consistente, opto per loro. Le classi esistono per un motivo e sto parlando a favore di quei motivi. Inoltre non vedo come aggiungere nomi di classe renderà il codice non semantico.

Devner Devner
23 set 2014 16:06:50

Stai tornando indietro perché stai cercando di modificare il tuo codice HTML per ottenere un cambiamento nella presentazione. Modificare la presentazione è il lavoro del foglio di stile e dovrebbe essere la cosa che stai cercando di cambiare qui.

Otto Otto
23 set 2014 19:38:15
Mostra i restanti 4 commenti
0

Stavo cercando la stessa soluzione e alla fine ho trovato la risposta, il codice qui sotto ha funzionato perfettamente per me. Volevo aggiungere la classe "btn btn-primary" al pulsante di invio nel modulo dei commenti.

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

Gli argomenti $args che ho utilizzato sono

$args = array(
'comment_field' => '<p class="comment-form-comment"><label for="comment">Commento</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">Nome <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">Sito web</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">Annulla risposta</button>',
'label_submit' => 'Invia commento',);
17 dic 2013 12:31:35
0

Suggerisco a chi ha questo problema di impostare uno stile per l'id "post-comment", come ho fatto io:

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

Buona fortuna! :)

8 lug 2012 12:47:13
3
-3

Risponderò (in ritardo) poiché stavo cercando una risposta a questo e ho deciso di affrontarlo da solo.

Innanzitutto, per rispondere alla domanda "perché aggiungere una classe?"... Nel mio caso, ho scelto di utilizzare un framework UI chiamato Foundation per progettare il mio tema più recente per il mio blog personale. L'ho scelto proprio perché mi piace il suo stile per i pulsanti. Tuttavia, richiede allo sviluppatore di aggiungere una classe a un pulsante <input>, e non mi ero reso conto che questo non poteva essere fatto in WP fino a quando non avevo quasi completato il tema!

Quindi, ecco cosa ho fatto. Ho dovuto modificare il file /wp-includes/comment-template.php, quindi usatelo a vostro rischio perché potrebbe essere sovrascritto durante un aggiornamento di WP.


Dopo la riga 1540 (nella versione 3.2.1) aggiungete la seguente riga:

'class_submit'         => 'submit',

Poi modificate la riga 1576 con quanto segue:

<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'] ); ?>" />

Ora avete un nuovo valore predefinito chiamato class_submit che può essere incluso nell'array parametro $args della funzione comment_form():

<?php comment_form(
        array(              
            'class_submit' => __('XXX'),
        )
    ); ?>

Buon lavoro!

19 ott 2011 05:07:35
Commenti

Modificare il core è una pessima idea e su questo sito alcune persone la prendono sul personale. Dato che sei nuovo qui, rimuoverò il voto negativo che qualcuno ti ha lasciato. Ma ora lo sai.

MTT MTT
19 ott 2011 14:50:20

Alex, Taylor ha ragione. NON modificare MAI i file del core! MAI E POI MAI!

Devner Devner
16 nov 2012 21:23:16

Non modificare mai i file del core.

Rantiev Rantiev
17 ago 2014 21:25:42