Come aggiungere attributi a uno shortcode

13 lug 2016, 20:36:35
Visualizzazioni: 44.2K
Voti: 4

Leggendo il codex, ho:

function btn_shortcode( $atts, $content = null ) {
    $a = shortcode_atts( array(
        'class' => 'button',
    ), $atts );

    return '<a class="' . esc_attr($a['class']) . '">' . $content . '</a>';
}
add_shortcode( 'button', 'btn_shortcode' );

Nel WYSIWIG inserisco [button class="btn btn-lg btn-default"]Scopri di più[/button] e funziona come desidero, ma voglio modificare il mio shortcode per fare questo:

[button href="foo" class="btn btn-lg btn-default"]Scopri di più[/button]

Come dovrei modificare la mia funzione per permettere questo?

0
Tutte le risposte alla domanda 1
13
10

Devi solo aggiungere un altro elemento all'array (e poi generarlo in output):

function btn_shortcode( $atts, $content = null ) {
    $a = shortcode_atts( array(
        'class' => 'button',
        'href'  =>  '#'
    ), $atts );

    return '<a class="' . esc_attr($a['class']) . '" href="' . esc_attr($a['href']) . '">' . $content . '</a>';
}
add_shortcode( 'button', 'btn_shortcode' );

//MODIFICA:

Per aggiungere stili definiti dall'utente, basta aggiungere un altro elemento all'array:

function btn_shortcode( $atts, $content = null ) {
    $a = shortcode_atts( array(
        'class' => 'button',
        'href'  =>  '#',
        'style' =>  ''
    ), $atts );

    return '<a class="' . esc_attr($a['class']) . '" href="' . esc_attr($a['href']) . '" style="' . esc_attr($a['style']) . '">' . $content . '</a>';
}
add_shortcode( 'button', 'btn_shortcode' );

Ecco un esempio di utilizzo:

[button href="foo" class="btn btn-lg btn-default" style="font-weight:bold; margin-top:50px; background-color: #999"]Scopri di più[/button]

//MODIFICA2:

Puoi aggiungere diversi attributi di stile allo shortcode e poi generarli tutti all'interno dell'attributo style del tag HTML, ma questo limiterà il CSS personalizzato solo a questi attributi predefiniti e dovrai anche avere alcuni valori predefiniti per ognuno di essi nel caso l'utente li lasci vuoti. Se alcuni vengono lasciati vuoti e non hai valori predefiniti, potresti ritrovarti con qualcosa del genere - <a href="#foo" class="button" style="font-weight:; margin-top: 20px; background-color:;"

function btn_shortcode( $atts, $content = null ) {
    $a = shortcode_atts( array(
        'class' => 'button',
        'href'  =>  '#',
        'background-color' =>  '#999',
        'font-weight' => 'normal',
        'margin-top' => '10px'

    ), $atts );

    return '<a class="' . esc_attr($a['class']) . '" href="' . esc_attr($a['href']) . '" style="font-weight:' . esc_attr($a['font-weight']) . '; background-color' . esc_attr($a['background-color']). '; margin-top:' . esc_attr($a['margin-top']) . ';">' . $content . '</a>';
}

Ecco un esempio di utilizzo:

[button href="foo" class="btn btn-lg btn-default" font-weight="bold" margin-top="50px" background-color="#999"]Scopri di più[/button]

13 lug 2016 21:16:36
Commenti

Come gestiresti gli stili però?

Darren Bachan Darren Bachan
13 lug 2016 21:58:33

Con stili intendi qualcosa come [button href="foo" class="btn btn-lg btn-default" style="font-weight:bold"]Scopri di più[/button] o qualcos'altro (se qualcos'altro, per favore fornisci un esempio)?

Sledge Hammer Sledge Hammer
13 lug 2016 22:08:49

Sì, ad esempio supponiamo di avere font-weight, margin-top, background-color come esempi.

Darren Bachan Darren Bachan
13 lug 2016 22:20:46

Dai un'occhiata alla mia risposta modificata. Per ogni nuovo attributo che ti serve, devi solo aggiungere un altro elemento all'array (e usarlo successivamente ovviamente).

Sledge Hammer Sledge Hammer
13 lug 2016 22:54:01

quindi nell'array aggiungo 'background-color' => 'whatever' ma come lo inserisco nello stile? Sono ancora un po' confuso.

Darren Bachan Darren Bachan
13 lug 2016 23:59:59

Quindi hai bisogno di attributi multipli per diverse proprietà di stile e non solo uno dove aggiungi CSS puro?

Sledge Hammer Sledge Hammer
14 lug 2016 00:17:08

Vorrei sapere come fare, come un altro metodo per ottenere questo. Il tuo metodo è ottimo. Conosco il CSS quindi posso intervenire lì. Sento che se ci fossero attributi multipli per stili diversi sarebbe più semplice per qualcuno, come un cliente, entrare e apportare modifiche che sarebbero più facili da modificare.

Darren Bachan Darren Bachan
14 lug 2016 01:38:42

@Darren Bachan - Dai un'occhiata alla risposta modificata.

Sledge Hammer Sledge Hammer
14 lug 2016 10:52:07

Questo richiederebbe comunque all'utente di dover digitare cose nello "style", ecco come speravo che apparisse lo shortcode [button class="foo" background-color="#000000" margin-top="20px;"]

Darren Bachan Darren Bachan
14 lug 2016 18:18:57

[button class="btn" style=""background-color:#e6e7e8; margin-top:100px;"] Ho inserito alcuni valori di test qui, basandomi sul tuo codice, ma non li legge e prende i valori predefiniti.

Darren Bachan Darren Bachan
14 lug 2016 18:25:46

@Darren Bachan - Hai guardato la sezione //EDIT2: dove il nuovo codice fa esattamente la stessa cosa?

Sledge Hammer Sledge Hammer
14 lug 2016 18:39:53

Ah, non so come l'abbia perso di vista, sì ok questo funziona. Fantastico.

Darren Bachan Darren Bachan
14 lug 2016 19:02:41

funziona per me. il mio voto positivo.

Naren Verma Naren Verma
6 giu 2022 16:29:01
Mostra i restanti 8 commenti