Parametri Multipli per uno Shortcode

4 feb 2013, 16:22:18
Visualizzazioni: 34.3K
Voti: 3

Sto lavorando alla creazione di alcuni shortcode per il mio blog. Riesco a impostare un singolo parametro per il mio shortcode, ma non sono sicuro di come impostare parametri diversi.

Per esempio, posso usare [myshortcode myvalue] per generare un blocco html all'interno del contenuto del post.

Ecco quello che sto utilizzando attualmente:

function test_shortcodes( $atts ) {
    extract( shortcode_atts( array(
        'myvalue' => '<div class="shortcodecontent"></div>'

    ), $atts ) );

    return $myvalue;
}
add_shortcode( 'myshortcode', 'test_shortcodes' );

Ora, come posso utilizzare [myshortcode myothervalue] per generare un blocco HTML diverso?

Si noti che lo shortcode è lo stesso, solo il parametro viene cambiato.

6
Commenti

potrebbero essere utili degli esempi di codice del tuo shortcode. Almeno le parti importanti.

Steve Steve
4 feb 2013 16:28:41

Intendi myvalue="something", giusto?

s_ha_dum s_ha_dum
4 feb 2013 16:35:43

@Stephen Ho aggiunto il mio pezzo di codice. s_ha_dum no, non è quello che intendo.

Abhik Abhik
4 feb 2013 18:22:38

Puoi fornire un esempio di come stai scrivendo il tuo shortcode nella pagina/post? Il codice non ha molto senso.

Steve Steve
4 feb 2013 18:35:51

@Stephen eccolo qui

Il primo paragrafo del post [myshortcode myvalue]

Secondo paragrafo [myshortcode myothervalue]

Abhik Abhik
4 feb 2013 18:39:35

Devi consultare il codex per capire gli shortcode. Vedi questa documentazione: http://codex.wordpress.org/Shortcode_API

Steve Steve
4 feb 2013 18:42:19
Mostra i restanti 1 commenti
Tutte le risposte alla domanda 5
0
10

Esaminiamo lo shortcode

[SH_TEST var1="somevalue" var2="someothervalue"]IL CONTENUTO DELLO SHORTCODE[/SH_TEST]

La funzione di gestione dello shortcode accetta 3 parametri

  1. $atts - un array di attributi passati dallo shortcode, nel nostro caso:

    • $atts['var1'] è impostato a 'somevalue'
    • $atts['var2'] è impostato a 'someothervalue'
  2. $content - è una stringa del valore racchiuso tra i tag dello shortcode, nel nostro caso: -$content è impostato a IL CONTENUTO DELLO SHORTCODE

  3. $tag - è una stringa del tag dello shortcode, nel nostro caso: -$tag è impostato a SH_TEST

Quando creo uno shortcode, di solito definisco i valori predefiniti e li unisco con i valori inviati dal tag dello shortcode, ad esempio:

add_shortcode('SH_TEST','SH_TEST_handler');
function SH_TEST_handler($atts = array(), $content = null, $tag){
    shortcode_atts(array(
        'var1' => 'valore predefinito var1',
        'var2' => false
    ), $atts);

    if ($atts['var2'])
          return 'mioaltrovalore';
    else
          return 'miovalore'; 
}
4 feb 2013 17:22:04
1

Se usi lo shortcode in questo modo atts[0] conterrà il valore:

add_shortcode( 'test', 'test_callback' );

function test_callback( $atts )
{
    return $atts[0];
}

Un altro modo è richiamare il valore con un nome:

[myshortcode val="mio_valore"]

function test_callback( $atts )
{
    return $atts["val"];
}
4 feb 2013 16:29:48
Commenti

Puoi elaborare il primo processo, per favore?

Abhik Abhik
4 feb 2013 18:25:04
0

È meglio procedere in questo modo:

function test_shortcodes( $atts ) {
    extract( shortcode_atts( array(
        'type' => 'myvalue'

    ), $atts ) );

    switch( $type ){
        case 'myvalue': 
            $output = '<div class="shortcodecontent"></div>';
            break;

        case 'myothervalue': 
            $output = '<div class="othershortcodecontent"></div>';
            break;

        default:
            $output = '<div class="defaultshortcodecontent"></div>';
            break;
    }

    return $output;
}
add_shortcode( 'myshortcode', 'test_shortcodes' );

Utilizzalo in questo modo:

[myshortcode type="myvalue"] per ottenere <div class="shortcodecontent"></div>

e

[myshortcode type="myothervalue"] per ottenere <div class="othershortcodecontent"></div>

4 feb 2013 18:36:50
0

Questo metodo funziona per me in tutti i casi utilizzando [myshortcode type="myvalue"]

function test_shortcodes( $atts = array() ) {
extract( shortcode_atts( array(
    'type' => 'myvalue' // Valore predefinito

), $atts ) );

switch( $atts['type] ){
    case 'myvalue': 
        $output = '<div class="shortcodecontent"></div>';
        break;

    case 'myothervalue': 
        $output = '<div class="othershortcodecontent"></div>';
        break;

    default:
        $output = '<div class="defaultshortcodecontent"></div>';
        break;
}

return $output;
}
add_shortcode( 'myshortcode', 'test_shortcodes' );

E se vuoi aggiungere un altro parametro, tutto ciò che devi fare è questo [myshortcode type="myvalue" other="somevalue"]

test_shortcodes( $atts = array() ) {
extract( shortcode_atts( array(
    'type' => 'myvalue', // Può essere predefinito
    'other' => 'somevalue' // Può essere predefinito

), $atts ) );

switch( $atts['other'] ){
    case 'somevalue': 
        $output = '<div class="shortcodecontent">somevalue</div>';
        break;

    case 'myothervalue': 
        $output = '<div class="othershortcodecontent"></div>';
        break;

    default:
        $output = '<div class="defaultshortcodecontent"></div>';
        break;
}

return $output;
}
add_shortcode( 'myshortcode', 'test_shortcodes' );

Spero che questo sia utile

11 nov 2016 19:08:59
7
-2

Per prima cosa, dovrai definire l'elemento $atts nella tua funzione perché $atts è un array.

Ecco il codice completo per passare la variabile nello shortcode -

Supponiamo che tu debba mostrare tutti i prodotti di una categoria tramite shortcode, devi inserire il seguente codice nel tuo file delle funzioni -

 function creative_writing_func($atts) {
 $args = array(
'post_type'      => 'product',
'posts_per_page' => 10,
'product_cat'    => $atts['categoryname']
);

$loop = new WP_Query( $args );

while ( $loop->have_posts() ) : $loop->the_post();
global $product;
echo '<br /><a href="'.get_permalink().'">' . 
woocommerce_get_product_thumbnail().' '.get_the_title().'</a>';
endwhile;

wp_reset_query();
}

add_shortcode('creative_writing_func_short', 'creative_writing_func');

Ora puoi semplicemente incollare il codice dello shortcode nel tuo file template o nell'editor predefinito di Wordpress -

  [creative_writing_func_short categoryname="creative-writing-english-literature"]

Dove stiamo passando il nome della Categoria (creative-writing-english-literature) nello shortcode.

L'ho testato e funziona correttamente.

22 giu 2018 13:31:49
Commenti

Non puoi usare echo in uno shortcode, la callback deve restituire una stringa.

fuxia fuxia
22 giu 2018 16:01:47

Per favore non postare codice non testato. Specialmente se dici che è testato e funzionante!

Andy Macaulay-Brook Andy Macaulay-Brook
22 giu 2018 18:42:41

@fuxia Puoi usare echo così come i tag HTML, dipende dalle tue esigenze, ho usato questo shortcode per visual composer per mostrare il nome del prodotto con la miniatura e il link. E funziona perfettamente.

Amritosh pandey Amritosh pandey
23 giu 2018 22:17:25

@AndyMacaulay-Brook Attualmente sto utilizzando questo codice nel mio portale e-commerce Wordpress. Questo è testato come ho detto.

Amritosh pandey Amritosh pandey
23 giu 2018 22:19:06

Vedi https://wordpress.stackexchange.com/a/73083/73 per una spiegazione. Se usi echo, il contenuto potrebbe essere stampato dove non te lo aspetti.

fuxia fuxia
23 giu 2018 22:20:59

@fuxia Il contenuto verrà stampato dove aggiungi il tuo shortcode. Come ho spiegato - sto usando lo stesso shortcode (con alcuni tag HTML aggiornati) da utilizzare nel visual composer, e funziona bene. Grazie per i tuoi suggerimenti.

Amritosh pandey Amritosh pandey
23 giu 2018 22:25:37

Qualsiasi sito web che analizza the_content, magari tramite un plugin SEO, prima che il template venga elaborato inizierà a generare errori "headers already sent", solo per fare un esempio di cosa potrebbe andare storto se uno shortcode utilizza echo.

Andy Macaulay-Brook Andy Macaulay-Brook
23 giu 2018 22:35:08
Mostra i restanti 2 commenti